声明事物:begin tran
回滚事物:ROLLBACK TRAN
提交事物:commit tran(不写会隐式提交)
判断是否发生异常:
结束前:
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
RETURN
END
2019 02 12
之前看别人博客说是try catch sqlserver2008版本没有,2016版本才有,今天碰到一个问题解决不了了,想到了try catch,试了一下2008版本也能用。语法如下
begin try
--your code
end try
begin catch
--your code
end catch
20200506:
合写@参考文章
BEGIN TRY BEGIN TRAN --YOUR CODE IF @@ERROR <> 0 BEGIN ROLLBACK TRAN RETURN END ELSE BEGIN COMMIT TRAN END END TRY BEGIN CATCH IF @@TRANCOUNT > 0 BEGIN ROLLBACK TRAN; END --YOUR CODE END CATCH
@@TranCount说明@参考文章
在SqlServer里,嵌套事务的层次是由@@TranCount全局变量反映出来的。 每一次Begin Transaction都会引起@@TranCount加1。而每一次Commit Transaction都会使@@TranCount减1,而RollBack Transaction会回滚所有的嵌套事务包括已经提交的事务和未提交的事务,而使@@TranCount置0。