結果の処理 (ODBC)
適用対象: SQL Server Azure SQL データベース 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 ドライバー バージョンでは、ドライバー固有 の SQLGetStmtAttr オプション (SQL_SOPT_SS_NOCOUNT_STATUS) が導入され、NOCOUNT オプションがオンかオフかに関するレポートが表示されます。 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 つの値、値の行全体、または値の複数の行を取得します。
さらに結果セットが存在するかどうかを確認するテストを行い、存在する場合は、新しい結果セットの特性を判断する処理まで戻って、それ以降をループ処理します。
データ ソースから行を取得し、アプリケーションに返す処理を フェッチ と呼びます。