1

我正在使用空间类型更新表,并且可能必须执行三个或更多更新以确保几何类型成功加载到地理类型中。我要做的是对我们进行第一次更新并提交尽可能多的行,然后在第一次失败的地方使用第二次更新,最后在第二次失败的地方使用第三次更新。

我成功地手动完成了这项工作,并使用几何类型更新了所有地理类型。这些是我正在使用的语句:

更新声明#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

有没有办法写这个,这样它就可以让我在没有遇到错误的地方更新行,然后在出现错误的情况下继续下一个更新语句?

我希望这是有道理的,任何帮助将不胜感激。

4

1 回答 1

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
于 2012-06-18T07:52:32.777 回答