結果の処理 (ODBC)
アプリケーションで 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 ドライバーでは、RAISERROR で重大度が 11 以上の SQL_ERROR が返されます。 RAISERROR の重大度が 19 以上の場合は、接続も削除されます。
アプリケーションでは、SQL ステートメントから返される結果セットを処理するために次の処理を行います。
結果セットの特性を判断します。
プログラム変数に列をバインドします。
1 つの値、値の行全体、または値の複数の行を取得します。
さらに結果セットが存在するかどうかを確認するテストを行い、存在する場合は、新しい結果セットの特性を判断する処理まで戻って、それ以降をループ処理します。
データ ソースから行を取得し、取得した行をアプリケーションに返す処理をフェッチと呼びます。
このセクションの内容
関連項目
概念
SQL Server Native Client (ODBC)