2013-10-11 41 views
0

我有一個存儲過程更新表,非常標準的插入查詢和問題表中有一個約束,以確保沒有重複的數據可以進去,它的錯誤就好了,當過程是用重複數據執行,但proc的最後一步執行一個電子郵件存儲過程。即使插入失敗,電子郵件也會被髮送出去?我認爲程序會因插入錯誤而停止?存儲過程錯誤,但後來觸發最後一節

回答

1

不是 - 它取決於錯誤的嚴重程度。如果嚴重性小於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 
+1

一個約束衝突** **確實有一個嚴重性比11更大,但它只是終止聲明沒有範圍或批處理。參見[發生錯誤時會發生什麼?](http://www.sommarskog.se/error-handling-I.html#whathappens) –