2017-11-14 20 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

なぜDBMSが使用している 'BEGIN' ...' END' –

+0

内部 '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

関連する問題