MSSQL存储过程事务使用技巧

基本方法

事务一定采用

1
2
3
4
5
6
7
8
9
10
11
12
13
set xact_abort on;
begin try
begin tran
-- business logic
commit tran
end try
begin catch
if xact_state() = -1
begin
rollback tran
end
-- log
end catch

或者

1
2
3
4
5
6
7
8
9
10
11
12
begin try
begin tran
-- business logic
end tran
end try
begin catch
if @@trancount > 0
begin
rollback tran
-- log
end
end catch

的方式来实现,否则错误控制极难处理

注意:

  1. 第一种方式当中的xact_abort开启之后,在catch当中的xact_state是来判断是否有不可提交的事务,注意不可提交指的是在事务执行过程当中出现问题
  2. 第二种方式xact_abort是关闭的,注意在这里不能通过xact_state来判断,因为没有提交的事务不一定是不可提交的事务
  3. 这个选项的作用是当出现错误的时候即将这个事务标记成不可提交的