SQL Server:插入后包含插入输出的回滚神秘失败

时间:2010-08-19 08:53:06

标签: sql-server sql-server-2005 transactions rollback

包含输出语句的插入失败后的回滚 “ROLLBACK TRANSACTION请求没有相应的BEGIN TRANSACTION。” 如果删除了输出语句,那么它可以正常工作。这种行为有解释吗?

示例:

create table test(i integer primary key)
go
begin transaction
  insert into test (i) values (1)
  insert into test (i) output inserted.i values (1)
go
rollback -- Fails 
go

begin transaction
  insert into test (i) values (1)
  insert into test (i) values (1)
go
rollback -- Works
go

2 个答案:

答案 0 :(得分:2)

我不知道为什么会这样。看起来似乎隐式设置了SET XACT_ABORT ON

作为SQL Server 2005 SP3的解决方法,我们可以在阻止你的情况下执行此操作

create table test(i integer primary key)
go
DECLARE @foo TABLE (i int)
begin TRANSACTION
  insert into test (i) values (1)
  insert into test (i) output inserted.i INTO @foo values (1)
GO
rollback --OK
GO

修改:It could be that the OUTPUT clause is undefined

答案 1 :(得分:1)

仅供参考,这在SQL 2008中运行良好,因此必须在某些时候进行更正。