ODBC でのトランザクションの実行
適用対象: SQL Server
Azure SQL データベース
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
重要
SQL Server Native Client (SNAC) は同梱されていません。
- SQL Server 2022 (16.x) 以降のバージョン
- SQL Server Management Studio 19 以降のバージョン
SQL Server Native Client (SQLNCLI または SQLNCLI11) と従来の Microsoft OLE DB Provider for SQL Server (SQLOLEDB) は、新しいアプリケーション開発には推奨されません。
新しいプロジェクトの場合は、次のいずれかのドライバーを使用します。
SQL Server データベース エンジン (バージョン 2012 から 2019) のコンポーネントとして付属する SQLNCLI については、この「サポート ライフサイクルの例外」を参照してください。
ODBC のトランザクションは接続レベルで管理されます。 アプリケーションはトランザクションの完了時に、その接続のすべてのステートメント ハンドルで完了したすべての作業を、コミットまたはロールバックします。 トランザクションをコミットまたはロールバックするには、アプリケーションは COMMIT ステートメントまたは ROLLBACK ステートメントを送信するのではなく、 SQLEndTran を呼び出す必要があります。
アプリケーションは、 SQLSetConnectAttr を呼び出して、トランザクションを管理する 2 つの ODBC モードを切り替えます。
自動コミット モード
各ステートメントは、正常に完了したときに自動的にコミットされます。 自動コミット モードで実行するときは、他のトランザクション管理関数は必要ありません。
手動コミット モード
実行されたすべてのステートメントは、 SQLEndTran を呼び出して明示的に停止するまで、同じトランザクションに含まれます。
自動コミット モードは、ODBC の既定のトランザクション モードです。 接続が確立されると、 SQLSetConnectAttr が呼び出されて自動コミット モードがオフに設定されて手動コミット モードに切り替わるまで、自動コミット モードになります。 アプリケーションが自動コミットを無効にすると、次にデータベースに送信されるステートメントでトランザクションが開始されます。 その後、アプリケーションが SQL_COMMIT または SQL_ROLLBACK オプションを使用して SQLEndTran を呼び出すまで、トランザクションは有効なままになります。 SQLEndTran が次のトランザクションを開始した後にデータベースに送信されるコマンド。
手動コミット モードから自動コミット モードに切り替えると、ドライバーは接続で現在開かれているすべてのトランザクションをコミットします。
ODBC アプリケーションで BEGIN TRANSACTION、COMMIT TRANSACTION、ROLLBACK TRANSACTION などの Transact-SQL トランザクション ステートメントを使用すると、ドライバーの動作が不確定になる可能性があるので、このような Transact-SQL トランザクション ステートメントは使用しないでください。 ODBC アプリケーションは、自動コミット モードで実行し、トランザクション管理関数やステートメントを使用しないか、手動コミット モードで実行し、ODBC SQLEndTran 関数を使用してトランザクションをコミットまたはロールバックする必要があります。