即使有错误也执行update子句

时间:2013-09-23 21:36:16

标签: sql tsql

我正在做一些脚本测试,我想确保如果我在此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太长了。

任何想法?

我知道它有一个很长的desc我可以只包含更新,但为了详细的目的,我把它包含在Catch中。

1 个答案:

答案 0 :(得分:1)

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

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