你看過嗎TRY
/CATCH
?
http://msdn.microsoft.com/en-us/library/ms175976.aspx
當然,你仍然只能趕上送你到CATCH
如果你這樣做的第一個錯誤:
BEGIN TRANSACTION; -- not sure why you're using a named transaction
BEGIN TRY
UPDATE ...
INSERT ...
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE();
ROLLBACK TRANSACTION;
END CATCH
但是你可以在每個包裹的操作擁有TRY
/CATCH
,例如
BEGIN TRANSACTION; -- still not sure why you're using a named transaction
BEGIN TRY
UPDATE ...
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE();
ROLLBACK TRANSACTION;
END CATCH
BEGIN TRANSACTION;
BEGIN TRY
INSERT ...
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE();
ROLLBACK TRANSACTION;
END CATCH
但是我不確定你想在這裏遵循什麼規則......如果更新失敗,你希望插入成功嗎?如果你想要所有的行動成功或失敗作爲一個組,那麼你想要第一個方法,在一個TRY
一切嘗試。
你也應該看看厄蘭Sommarskog的聖經上的錯誤處理:
http://www.sommarskog.se/error_handling_2005.html