你看过吗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