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