我正在更新一个包含空间类型的表,并且我可能需要执行三个或更多更新,以确保几何类型已成功加载到地理类型中。我想要做的是第一次更新并提交尽可能多的行,然后使用第二次更新,第一次更新失败,最后,使用第三次更新,第二次更新失败。
我成功地设法完成了手动操作并使用几何类型更新了所有地理类型。这些是我正在使用的陈述:
更新声明#1:
Update Postcode set geog = geography::STGeomFromWKB(geom.STAsBinary(), 4326)
FROM Postcode
WHERE geog is null
更新声明#2:
Update Postcode set geog = geography::STGeomFromWKB(geom.STUnion(geom.STStartPoint()).STAsBinary(), 4326)
FROM Postcode
WHERE geog is null
更新声明#3:
Update Postcode set geog = geography::STGeomFromWKB(geom.STBuffer(0.00001).STBuffer(-0.00001).STAsBinary(), 4326)
FROM Postcode
WHERE geog is null
有没有办法写这个,这样它可以让我在没有遇到错误的地方更新行,然后在发生错误的情况下转到下一个更新语句?
我希望它有意义,任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
如果有办法测试每个作业而不实际抛出错误,那么首选方法是使用CASE语句在它们之间切换。
update postcode set geog = case when <test> then <A>
when <testB> then <B>
else <C>
end
否则,如果无法避免错误,则可以使用嵌套的try / catch块来确保执行。但是,当在给定语句中发生错误时,可以回滚整个语句(这里不是100%肯定)。如果你可以只运行所有三个语句,那么你就会很高兴,因此不确定这是否是一个问题。
BEGIN TRY
-- A
END TRY
BEGIN CATCH
BEGIN TRY
-- B
END TRY
BEGIN CATCH
-- C
END CATCH
END CATCH