是不是这个:set SET XACT_ABORT { ON | OFF } 这个也不是完全的什么都回滚的 看你错误的严重程度了 比如说调用不存在的表: create proc proc_1 as SET XACT_ABORT ON begin tran select * from noexiststable if @@error>0 goto err_1 commit tran return(0) err_1: if @@trancount>0 rollback tran return(-1) exec proc_1 /* 返回: 服务器: 消息 208,级别 16,状态 1,过程 proc_1,行 5 Invalid object name 'noexiststable'. 服务器: 消息 266,级别 16,状态 1,过程 proc_1,行 12 Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 0, current count = 1. */ 可见错误处理没有执行
SET XACT_ABORT ON ,我个人觉得,由于mssql的触发器比较特殊,就是一次触发,比如你的批量递交,触发器只执行一次,你在中间调用存储过程,你在其中有有什么动作,是否对你插入的每一条数据产生如期的影响,我觉得你应该小心。检查是否是这方面的原因引起的。
这个也不是完全的什么都回滚的
看你错误的严重程度了
比如说调用不存在的表:
create proc proc_1
as
SET XACT_ABORT ON
begin tran
select * from noexiststable
if @@error>0 goto err_1
commit tran
return(0)
err_1:
if @@trancount>0
rollback tran
return(-1)
exec proc_1
/*
返回:
服务器: 消息 208,级别 16,状态 1,过程 proc_1,行 5
Invalid object name 'noexiststable'.
服务器: 消息 266,级别 16,状态 1,过程 proc_1,行 12
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 0, current count = 1.
*/
可见错误处理没有执行