結果の処理 (ODBC)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

アプリケーションが SQL ステートメントを送信すると、SQL Server は結果データを 1 つ以上の結果セットとして返します。 結果セットとは、クエリの条件に一致する行と列の集まりです。 SELECT ステートメント、カタログ関数、および一部のストアド プロシージャでは、アプリケーションで使用できる結果セットが表形式で生成されます。 実行される SQL ステートメントがストアド プロシージャ、複数のコマンドを含むバッチ、またはキーワードを含む SELECT ステートメントの場合、処理対象の結果セットが複数生成されます。

ODBC カタログ関数では、データを取得することもできます。 たとえば、 SQLColumns は、データ ソース内の列に関するデータを取得します。 これらの結果セットには、0 行以上の行を含めることができます。

GRANT や REVOKE など、結果セットが返されない SQL ステートメントもあります。 これらのステートメントの場合、通常、ステートメントが成功したことを示す唯一の兆候は、 SQLExecute または SQLExecDirect からのリターン コードです。

INSERT ステートメント、UPDATE ステートメント、および DELETE ステートメントからは、変更によって処理された行数だけを含む結果セットが返されます。 この数は、アプリケーションが SQLRowCount を呼び出すときに使用できます。 ODBC 3.x アプリケーションはSQLRowCountを呼び出して結果セットを取得するか、SQLMoreResults を呼び出して取り消す必要があります。 アプリケーションが複数の INSERT、UPDATE、または DELETE ステートメントを含むバッチまたはストアド プロシージャを実行する場合、各変更ステートメントの結果セットは、 SQLRowCount を使用して処理するか、 SQLMoreResults を使用して取り消す必要があります。 バッチやストアド プロシージャに SET NOCOUNT ON ステートメントを含めることで、これらの数をキャンセルできます。

Transact-SQL には、NOCOUNT ステートメントが含まれています。 NOCOUNT オプションがオンに設定されている場合、SQL Server はステートメントの影響を受ける行の数を返せず、 SQLRowCount は 0 を返します。 SQL Server Native Client ODBC ドライバー のバージョンでは、NOCOUNT オプションがオンかオフかをレポートするために、ドライバー固有の SQLGetStmtAttr オプションがSQL_SOPT_SS_NOCOUNT_STATUS導入されています。 SQLRowCountが 0 を返す場合は、アプリケーションでSQL_SOPT_SS_NOCOUNT_STATUSをテストする必要があります。 SQL_NC_ONが返された場合、 SQLRowCount の値 0 は SQL Server が行数を返さないことを示すだけです。 SQL_NC_OFFが返された場合は、NOCOUNT がオフであり、 SQLRowCount の値 0 は、ステートメントが行に影響しなかったことを示します。 SQL_SOPT_SS_NOCOUNT_STATUSがSQL_NC_OFFされている場合、アプリケーションでは SQLRowCount の値を表示しないでください。 大きなバッチやストアド プロシージャには、複数の SET NOCOUNT ステートメントが含まれていることがあるので、プログラマは SQL_SOPT_SS_NOCOUNT_STATUS が一定であると想定することはできません。 このオプションは、 SQLRowCount が 0 を返すたびにテストする必要があります。

他のいくつかの Transact-SQL ステートメントは、結果セットではなく、メッセージにデータを含めて返します。 SQL Server Native Client ODBC ドライバーは、これらのメッセージを受信すると、SQL_SUCCESS_WITH_INFOを返して、情報メッセージが使用可能であることをアプリケーションに通知します。 その後、アプリケーションは SQLGetDiagRec を呼び出して、これらのメッセージを取得できます。 この方法で動作する Transact-SQL ステートメントは次のとおりです。

  • DBCC

  • SET SHOWPLAN (以前のバージョンの SQL Server で使用可能)

  • SET STATISTICS

  • PRINT

  • RAISERROR

SQL Server Native Client ODBC ドライバーは、重大度が 11 以上の RAISERROR でSQL_ERRORを返します。 RAISERROR の重大度が 19 以上の場合は、接続も削除されます。

アプリケーションでは、SQL ステートメントから返される結果セットを処理するために次の処理を行います。

  • 結果セットの特性を判断します。

  • プログラム変数に列をバインドします。

  • 1 つの値、値の行全体、または値の複数の行を取得します。

  • さらに結果セットが存在するかどうかを確認するテストを行い、存在する場合は、新しい結果セットの特性を判断する処理まで戻って、それ以降をループ処理します。

データ ソースから行を取得し、アプリケーションに返す処理を フェッチ と呼びます。

このセクションの内容

参照

SQL Server Native Client (ODBC)
結果を処理する方法に関するトピック (ODBC)