我創建了一個存儲過程,該存儲過程運行許多用於修改數據的命令。如果一切成功,我只想提交交易。我用下面的方式try-catch塊(其中真實的東西我CATCH塊使用RAISERROR返回錯誤消息)這樣做:SQL:Try/Catch在嘗試訪問無法找到的表時沒有發現錯誤
BEGIN TRY
BEGIN TRANSACTION
UPDATE Table1 SET MyVarcharColumn = 'test'
UPDATE Table2 SET MyBitColumn = 1
UPDATE Table3 SET MyIntColumn = 42
COMMIT TRANSACTION
END TRY
CATCH
ROLLBACK TRANSACTION
END CATCH
這工作我想它的方式。例如,如果我將MyBitColumn設置爲'b'而不是1,則捕獲錯誤,控制流向CATCH,並且事務未提交。
我注意到的一個問題是,如果數據庫中不存在Table3,那麼它會出錯(無效的對象名稱),但CATCH塊永遠不會執行並且事務保持打開狀態。
我想處理這個問題,以處理數據庫被修改的任何(遠程)可能性(或者在這個存儲過程被正確添加,但其中一個表不存在的情況下發生的事情)。
我應該如何處理這些錯誤情況?
- 感謝您的幫助。
謝謝。設置導致事務回滾是有用的。但是,錯誤發生後,它仍然不會執行CATCH塊中的內容。這適用於我的應用程序(因爲無論如何都會向上傳遞錯誤),但如果有人試圖確保CATCH塊因其他原因而執行,則不會這樣做。 – Luke 2013-02-22 01:13:01
啊,明白了,在這種情況下,他們只是沒有被抓到那些類型的錯誤。謝謝! – Luke 2013-02-22 01:21:07