2013-09-23 35 views
1

更新條款。我要確保,如果UPDATE子句,我在此嘗試捕捉測試:執行,即使我做了一些測試腳本錯誤

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 

出現故障,其他行被更新只有那些沒有錯誤的人才能通過。
當前,因爲它是在TRY CATCH有一個ROLLBACK,確保沒有任何東西通過。

但是,當我嘗試運行UPDATE部分時,錯誤終止了整個腳本,而不是更新那些不會導致錯誤的錯誤,在這種情況下npalerm太長了。

任何想法?

我知道它的一個很長的desc我可能只是包含更新,但爲了詳細目的,我將它包含在Catch中。

回答

1

爲了單獨更新行並捕獲每行上的錯誤而不是在整個表/視圖更新上捕獲錯誤,您需要將整個事件包裝在cursor中。

請注意,遊標比基於集合的命令更耗費資源並且速度更慢。

相關問題