結果の処理 (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を呼び出して結果セットを取得するか、
Transact-SQL には、NOCOUNT ステートメントが含まれています。 NOCOUNT オプションがオンに設定されている場合、SQL Server はステートメントの影響を受ける行の数を返せず、 SQLRowCount は 0 を返します。 SQL Server Native Client ODBC ドライバー のバージョンでは、NOCOUNT オプションがオンかオフかをレポートするために、ドライバー固有の SQLGetStmtAttr オプションがSQL_SOPT_SS_NOCOUNT_STATUS導入されています。
他のいくつかの 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 つの値、値の行全体、または値の複数の行を取得します。
さらに結果セットが存在するかどうかを確認するテストを行い、存在する場合は、新しい結果セットの特性を判断する処理まで戻って、それ以降をループ処理します。
データ ソースから行を取得し、アプリケーションに返す処理を フェッチ と呼びます。