Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL リファレンス » SQL の使用 » SQL 文 » SQL 文 (A ~ D)

 

BEGIN TRANSACTION 文 [T-SQL]

この文は、ユーザ定義のトランザクションを開始するために使用します。

構文
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/2003 互換の連鎖モードは、明示的 COMMIT が実行されるときか、オートコミットする文 (データ定義文など) が実行されるときにだけトランザクションをコミットします。

chained データベース・オプションを設定してモードを制御できます。ODBC 接続と SQL Anywhere の組み込みの SQL 接続のデフォルト設定が ON の場合、SQL Anywhere は連鎖モードで実行されます (ODBC を使用している場合、AutoCommit ODBC 設定も確認が必要です)。TDS 接続のデフォルトは Off です。chained オプション [互換性]を参照してください。

非連鎖モードでは、トランザクションはデータ検索やデータ修正文の前に暗黙的に開始されます。これらの文には、DELETE、INSERT、OPEN、FETCH、SELECT、UPDATE があります。トランザクションの終了は、COMMIT または ROLLBACK 文を使って明示的に行います。

トランザクション内で chained オプションを変更することはできません。

警告

ストアド・プロシージャを呼び出すときは、目的のトランザクション・モードで正しく動作することを確認してください。

現在のネスト・レベルはグローバル変数 @@trancount に入っています。@@trancount 変数の値は、最初の BEGIN TRANSACTION 文が実行される前は 0 であり、@@trancount の値が 1 のときに実行された COMMIT だけがデータベースへの変更を永続的なものにすることができます。

トランザクションまたはセーブポイント名のない ROLLBACK 文は、常に文を最も外側の BEGIN TRANSACTION (明示的または暗黙的) 文にロールバックし、トランザクション全体をキャンセルします。

パーミッション

なし

関連する動作

なし

参照
標準と互換性
  • SQL/2003   ベンダ拡張。

次のバッチは、@@trancount の連続値を 0、1、2、1、0 で報告します。値はデータベース・サーバ・メッセージ・ウィンドウに出力されます。

PRINT @@trancount
BEGIN TRANSACTION
PRINT @@trancount
BEGIN TRANSACTION
PRINT @@trancount
COMMIT
PRINT @@trancount
COMMIT
PRINT @@trancount

@@trancount の値は、発行された明示的な BEGIN TRANSACTION 文を数える以上の目的には使用しないでください。

Adaptive Server Enterprise が暗黙的にトランザクションを起動する場合、@@trancount 変数を 1 に設定します。トランザクションが暗黙的に起動されたとき、SQL Anywhere は @@trancount 値を 1 に設定しません。そのため、(現在のトランザクションがあるときでも) BEGIN TRANSACTION 文が始まる前は、SQL Anywhere の @@trancount 変数の値は 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 になります。