SQL Server: откат после вставки, содержащей вставленный вывод, завершается загадочно - PullRequest
1 голос
/ 19 августа 2010

Откат после вставки, содержащей оператор вывода, завершается с «Запрос 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 ]

2 голосов
/ 19 августа 2010

Я не знаю, почему это происходит. Похоже, что SET XACT_ABORT ON устанавливается неявно

В качестве обходного пути для SQL Server 2005 с пакетом обновления 3 (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

Редактировать: Возможно, предложение OUTPUT не определено

1 голос
/ 20 августа 2010

К вашему сведению, это прекрасно работает в SQL 2008, поэтому в какой-то момент это должно быть исправлено.

...