三使用 set xact_abort 来控制部分违反约束的错误的执行过程
以下是引用片段
create table Table (a int check(a>))
go
set xact_abort on
begin tran
insert table values()
print 这里没有被执行
commit tran
go
print print ============================================== print
set xact_abort off
begin tran
insert table values()
print 这里被执行
commit tran
go
drop table table
但 set xact_abort 对于编译产生的错误确没有起作用且同样会产生孤立事务
set xact_abort on
begin tran
insert 一个不在的表 values()
print 这里没有被执行
commit tran
go
print print ============================================== print
set xact_abort off
begin tran
insert 一个不在的表 values()
print 这里没有被执行
commit tran
go
select @@trancount 当前连接的活动事务数 有两个孤立事务
if @@trancount<> rollback tran
对于sql中怪辟的各种错误和孤立事务在tsql编程中一定要注意小心孤立事务的陷阱尽量避免浪费或孤立资源Microsoft公开宣布过SQLServe下一版本Yukon将有内置异常处理语法那时可以通过代码对无法预料的错误有更好的控制
[] []