Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
ユーザー定義のトランザクションを開始します。
BEGIN TRAN[SACTION] [ transaction-name ]
オプションのパラメーター transaction-name はこのトランザクションに割り当てられた名前です。有効な識別子を指定します。トランザクション名はネストされた BEGIN/COMMIT または BEGIN/ROLLBACK 文の最も外側の組でのみ使用してください。
BEGIN TRANSACTION 文をトランザクション内で実行すると、トランザクションのネストレベルが 1 つ増加します。ネストレベルは COMMIT 文で減少します。トランザクションがネストされているときは、最も外側の COMMIT だけがデータベースへの変更を保存します。
Adaptive Server Enterprise と SQL Anywhere は、両方とも 2 つのトランザクションモードを持ちます。
デフォルトの Adaptive Server Enterprise トランザクションモードは非連鎖モードと呼ばれ、明示的な BEGIN TRANSACTION 文が実行されてトランザクションを起動しないかぎり、各文を個々にコミットします。反対に、ISO SQL/2008 互換の連鎖モードは、明示的 COMMIT が実行されるときか、オートコミットする文 (データ定義文など) が実行されるときにのみトランザクションをコミットします。
chained データベースオプションを設定してモードを制御できます。ODBC 接続と SQL Anywhere の組み込みの SQL 接続のデフォルト設定が ON の場合、SQL Anywhere は連鎖モードで実行されます (ODBC を使用している場合、AutoCommit ODBC 設定も確認が必要です)。TDS 接続のデフォルトは Off です。
非連鎖モードでは、トランザクションはデータ検索やデータ修正文の前に暗黙的に開始されます。これらの文には、DELETE、INSERT、OPEN、FETCH、SELECT、UPDATE があります。トランザクションの終了は、COMMIT または ROLLBACK 文を使って明示的に行います。
トランザクション内では chained オプションの設定を変更できません。
ストアドプロシージャーを呼び出すときは、目的のトランザクションモードで正しく動作することを確認してください。
現在のネストレベルはグローバル変数 @@trancount に入っています。@@trancount 変数の値は、最初の BEGIN TRANSACTION 文が実行される前は 0 であり、@@trancount の値が 1 のときに実行された COMMIT だけがデータベースへの変更を永続的なものにすることができます。
@@trancount の値は、実行された明示的な BEGIN TRANSACTION 文を数える以上の目的には使用しないでください。
Adaptive Server Enterprise が暗黙的にトランザクションを起動する場合、@@trancount 変数を 1 に設定します。トランザクションが暗黙的に起動されたとき、SQL Anywhere は @@trancount 値を 1 に設定しません。代わりに、SQL Anywhere の @@trancount 変数は、BEGIN TRANSACTION 文が始まる前は (現在のトランザクションがある場合でも) 0 の値を持ちますが、Adaptive Server Enterprise (連鎖モード) では、この変数は 1 の値を持ちます。
BEGIN TRANSACTION 文で起動するトランザクションには、最初の BEGIN TRANSACTION 文の後、@@trancount の値は SQL Anywhere と Adaptive Server Enterprise の両方で 1 です。トランザクションが異なる文で暗黙的に起動し、その後、BEGIN TRANSACTION 文が実行された場合、BEGIN TRANSACTION 文の後、@@trancount の値は、SQL Anywhere と Adaptive Server Enterprise の両方で 2 になります。
トランザクションまたはセーブポイント名のない ROLLBACK 文は、常に文を最も外側の BEGIN TRANSACTION (明示的または暗黙的) 文にロールバックし、トランザクション全体をキャンセルします。
なし
SQL/2008 ベンダー拡張。
Transact-SQL BEGIN TRANSACTION は Adaptive Server Enterprise によってサポートされます。
次のバッチは、一連の @@trancount の値を 0、1、2、1、0 と報告します。値はデータベースサーバーのメッセージウィンドウに出力されます。
PRINT @@trancount BEGIN TRANSACTION PRINT @@trancount BEGIN TRANSACTION PRINT @@trancount COMMIT PRINT @@trancount COMMIT PRINT @@trancount