1

我正在做一些脚本测试,我想确保如果我在这个 Try Catch 中测试的更新子句:

BEGIN TRY
   BEGIN TRAN
   UPDATE NAME
    SET NAME.ADDBY = 
    (CASE WHEN NAME.ADDBY = 'CONVERSION' THEN 'CONVERTED'  
    WHEN NAME.ADDBY = 'CJDOG'THEN 'CJDAREME' 
    WHEN NAME.ADDBY = 'npalerm' THEN 'REALLYLONGDETAILEDTEXT'
  ELSE NAME
   END)
   COMMIT TRAN 
END TRY
BEGIN CATCH
   IF @@TRANCOUNT >0
   PRINT ERROR_MESSAGE()
        ROLLBACK TRAN 

END CATCH
PRINT @@TRANCOUNT

失败,其他行被更新,只有那些没有错误的行通过。
Currenty因为它在 TRY CATCH 中,所以有一个 ROLLBACK 可以确保没有任何事情通过。

但是当我尝试只运行 UPDATE 部分时,错误会终止整个脚本,而不是更新那些不会导致错误的脚本,在这种情况下 npalerm 太长了。

有任何想法吗?

我知道它的描述很长,我本可以只包含更新,但出于详细目的,我将它包含在 Catch 中。

4

1 回答 1

1

为了单独更新行并捕获每一行的错误,而不是捕获整个表/视图更新的错误,您需要将整个内容包装在一个cursor中。

请注意,游标比基于集合的命令更耗费资源且速度更慢。

于 2013-09-23T22:03:22.060 回答