結果の処理 (ODBC)

適用対象:SQL ServerAzure SQL データベースAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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 には SET NOCOUNT の発言が含まれています。 NOCOUNTオプションがオンに設定されていると、SQL Server文の影響を受けた行のカウントは返さず、SQLRowCountは0を返します。 SQL Serverネイティブクライアントの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

  • SETSHOWPLAN(以前の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)