条件事务回滚

时间:2013-12-11 14:15:42

标签: sql-server tsql transactions sql-server-2012 rollback

我想知道,是否有可能根据特定批次的状态应用条件事务回滚。例如,我有以下代码:

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继续执行我的查询。有可能吗?

2 个答案:

答案 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并在外面提交