SQL Serverセッションで自動コミットをどのように設定しますか?
Implicit_transactionsをオフに設定することにより、自動コミットをオンにできます。
SET IMPLICIT_TRANSACTIONS OFF
設定がオンの場合、暗黙的なトランザクションモードに戻ります。暗黙的なトランザクションモードでは、変更を加えるたびにトランザクションが開始され、手動でコミットする必要があります。
たぶん、例はより明確です。これにより、データベースに変更が書き込まれます。
SET IMPLICIT_TRANSACTIONS ON
UPDATE MyTable SET MyField = 1 WHERE MyId = 1
COMMIT TRANSACTION
これにより、データベースに変更が書き込まれません。
SET IMPLICIT_TRANSACTIONS ON
UPDATE MyTable SET MyField = 1 WHERE MyId = 1
ROLLBACK TRANSACTION
次の例では、行を更新し、コミットするトランザクションがないことを訴えます。
SET IMPLICIT_TRANSACTIONS OFF
UPDATE MyTable SET MyField = 1 WHERE MyId = 1
ROLLBACK TRANSACTION
Mitch Wheatが言ったように、自動コミットはSql Server 2000以降のデフォルトです。
もっと永続的で迅速な方法が欲しかった。なぜなら、実際の更新/挿入クエリを書く前に余分な行を追加するのを忘れがちだからです。
SET IMPLICIT_TRANSACTIONSオプションのチェックボックスをチェックすることでそれを行いました。オプションに移動するにはMicrosoft SQL Server Management Studioで[ツール]> [オプション]> [クエリ実行]> [SQL Server]> [ANSI]を選択します。
クエリの実行が完了したら、必ずcommit
またはrollback
を実行してください。そうしないと、クエリを実行したテーブルが他のテーブルに対してロックされます。
自動コミットは、SQL Serverのデフォルトのトランザクション管理モードです。 (SQL 2000以降)
参照: トランザクションの自動コミット
SQLServer 2005 Expressでは、autocommit offを使用しても、Management Studioセッションからcommitコマンドを実際に発行することなく、DBテーブルへの挿入がコミットされました。唯一の違いは、自動コミットがオフの場合、すべての挿入をロールバックできることです; *autocommit on、できませんでした。* 実際、間違っていました。自動コミットモードをオフにすると、QA(クエリアナライザー)でのみ変更が表示されます)コマンドが発行されたウィンドウ。新しいQA(クエリアナライザー)ウィンドウをポップした場合、最初のウィンドウ(セッション)で行われた変更は表示されません。つまり、コミットされていません。変更を他のセッション(QAウィンドウ)から見えるようにするために、明示的なコミットまたはロールバックコマンドを発行する必要がありました-私の悪い!物事は正しく動作しています。