web-dev-qa-db-ja.com

SQL Serverセッションで自動コミットをどのように設定しますか?

SQL Serverセッションで自動コミットをどのように設定しますか?

61
hawkeye

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以降のデフォルトです。

80
Andomar

もっと永続的で迅速な方法が欲しかった。なぜなら、実際の更新/挿入クエリを書く前に余分な行を追加するのを忘れがちだからです。

SET IMPLICIT_TRANSACTIONSオプションのチェックボックスをチェックすることでそれを行いました。オプションに移動するにはMicrosoft SQL Server Management Studioで[ツール]> [オプション]> [クエリ実行]> [SQL Server]> [ANSI]を選択します。

クエリの実行が完了したら、必ずcommitまたはrollbackを実行してください。そうしないと、クエリを実行したテーブルが他のテーブルに対してロックされます。

46
Watt

自動コミットは、SQL Serverのデフォルトのトランザクション管理モードです。 (SQL 2000以降)

参照: トランザクションの自動コミット

8
Mitch Wheat

SQLServer 2005 Expressでは、autocommit offを使用しても、Management Studioセッションからcommitコマンドを実際に発行することなく、DBテーブルへの挿入がコミットされました。唯一の違いは、自動コミットがオフの場合、すべての挿入をロールバックできることです; *autocommit on、できませんでした。* 実際、間違っていました。自動コミットモードをオフにすると、QA(クエリアナライザー)でのみ変更が表示されます)コマンドが発行されたウィンドウ。新しいQA(クエリアナライザー)ウィンドウをポップした場合、最初のウィンドウ(セッション)で行われた変更は表示されません。つまり、コミットされていません。変更を他のセッション(QAウィンドウ)から見えるようにするために、明示的なコミットまたはロールバックコマンドを発行する必要がありました-私の悪い!物事は正しく動作しています。

2
Raj