包含输出语句的插入失败后的回滚 “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
答案 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
答案 1 :(得分:1)
仅供参考,这在SQL 2008中运行良好,因此必须在某些时候进行更正。