2010-08-19 2 views
1

출력 문을 포함하는 삽입 후에 롤백이 실패합니다. "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

이런 이유를 모르겠어요. SET XACT_ABORT ON 암시 적으로 우리가 이것을 할 수있는 SQL 서버 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

+0

감사합니다. 작동합니다. 나는 SQL 서버에서 아직 해결해야만하는 또 다른 버그로 그것을 그냥 쓸 것입니다. –

1

는 참고로이 SQL에서 잘 작동 2008 년, 어느 시점에서 수정되었을 것입니다.

+0

다른 일이 진행 중입니다. 일부 SQL 2008에서는 작동하지만 다른 언어에서는 작동하지 않습니다. select @@ version : 작동 : Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64) 2008 년 7 월 9 일 14:17:44 Windows NT 6.0의 Standard Edition (64 비트) (빌드 6001 : 서비스 팩 1) 오류 : Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64) 2009 년 3 월 29 일 10:11:52 Windows NT 6.1의 Standard Edition (64 비트) (빌드 7600 :) 작동 : Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64) Mar 29 2009 10:11:52 Windows NT 6.1의 Enterprise Edition (64 비트) (빌드 7600 :) –

+0

문제가 발생했습니다. 호환성 수준이었습니다. 호환성 수준 100 (SQL Server 2008)에서 작동하며 90 및 80에 실패합니다. –

+0

아, 잘 알고 있습니다. 그래서 그것이 "의도적으로"라는 것을 의미합니다 :) –

관련 문제