2017-11-14 4 views
1

테이블에 열을 추가 한 SQL Server 트랜잭션이 있으며 해당 열에 값이 추가됩니다. 그것은 완벽하게 실행되지만 변경 사항을 적용하지는 않습니다.SQL Server 트랜잭션이 적용되지 않습니다.

@@trancount으로 확인했으며 쿼리를 실행 한 후 값은 1입니다.

거래가 잘못되었습니다.

감사합니다.

BEGIN TRANSACTION 
    ALTER TABLE Table 
     ADD ColumnName VARCHAR(200) NULL; 
    GO 

    BEGIN TRY 
     UPDATE ColumnName 
     SET ColumnName = 'some value' 

     COMMIT TRANSACTION 
    END TRY 
    BEGIN CATCH 
     ROLLBACK TRANSACTION; 
    END CATCH; 
+1

이유는 BEGIN' ...'END' –

+0

당신이 어떤 DBMS를 '사용하는 내부'GO'를 사용? 이 코드는 제품마다 다릅니다. – jarlh

+0

테이블 이름을 열 이름으로 바꿉니다. –

답변

1

update을 변경하여 업데이트 할 테이블을 지정해야합니다.

UPDATE Table SET ColumnName = 'some value' 
0

이렇게하면 효과가 있습니다. XACT_ABORT은 런타임에 오류가 발생하면 트랜잭션을 자동으로 롤백합니다. 과거에 TRY...CATCH을 사용하는 데 문제가 있었으며이 경우에는 보증되지 않습니다.

SET XACT_ABORT ON 
BEGIN TRANSACTION 
    ALTER TABLE Table 
     ADD ColumnName VARCHAR(200) NULL; 

    UPDATE Table 
     SET ColumnName = 'some value'; 

    COMMIT TRANSACTION; 

SET XACT_ABORT OFF 

UPDATE 나는 여전히 TRY...CATCH 구조를 사용하려는 경우, 더 나은 과정을 설명하는이를 발견했다.

Try...Catch inside Transactions

관련 문제