我想知道,是否有可能根据特定批次的状态应用条件事务回滚。例如,我有以下代码:
BEGIN TRAN
--EXEC No 1
EXEC [dbo].[MyProc] 1;
GO
--EXEC No 2
EXEC [dbo].[MyProc] 22;
GO
--EXEC No 3
EXEC [dbo].[MyProc] 333;
GO
--EXEC No 4
EXEC [dbo].[MyProc] 5;
GO
COMMIT
如果EXEC No 3
失败,我想要回滚整个事务。如果任何其他执行失败,我希望SQL Server继续执行我的查询。有可能吗?
答案 0 :(得分:2)
是的,这是可能的。在每个过程调用周围使用TRY / CATCH块,确定如何处理每个相应CATCH块中每个过程的错误。
在您的情况下,只在CATCH块中执行ROLLBACK以进行第三次过程调用。
答案 1 :(得分:1)
Begin tran
Begin try
.....
commit
End try
begin catch
rollback
End catch
http://msdn.microsoft.com/fr-fr/library/ms175976.aspx
他们更喜欢做begin tran并在外面提交