0
我有一個存儲過程更新表,非常標準的插入查詢和問題表中有一個約束,以確保沒有重複的數據可以進去,它的錯誤就好了,當過程是用重複數據執行,但proc的最後一步執行一個電子郵件存儲過程。即使插入失敗,電子郵件也會被髮送出去?我認爲程序會因插入錯誤而停止?存儲過程錯誤,但後來觸發最後一節
我有一個存儲過程更新表,非常標準的插入查詢和問題表中有一個約束,以確保沒有重複的數據可以進去,它的錯誤就好了,當過程是用重複數據執行,但proc的最後一步執行一個電子郵件存儲過程。即使插入失敗,電子郵件也會被髮送出去?我認爲程序會因插入錯誤而停止?存儲過程錯誤,但後來觸發最後一節
不是 - 它取決於錯誤的嚴重程度。如果嚴重性小於11,那麼默認情況下SQL服務器將繼續運行。
我發現這篇文章,這似乎做解釋這個體面的工作:http://blog.sqlauthority.com/2012/04/26/sql-server-introduction-to-sql-error-actions-a-primer/
如果我是你,我會確保在存儲過程做一個try/catch塊在事務內的一切。
EG
BEGIN TRAN
BEGIN TRY
-- Do insert
-- send email
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK TRAN
END CATCH
IF @@TRANCOUNT > 0 COMMIT TRAN
一個約束衝突** **確實有一個嚴重性比11更大,但它只是終止聲明沒有範圍或批處理。參見[發生錯誤時會發生什麼?](http://www.sommarskog.se/error-handling-I.html#whathappens) –