SQL Server の既定の結果セットの使用
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
ODBC カーソルの既定の属性を次に示します。
SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, SQL_CURSOR_FORWARD_ONLY, SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, SQL_CONCUR_READ_ONLY, SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, 1, SQL_IS_INTEGER);
これらの属性が既定値に設定されるたびに、SQL Server Native Client ODBC ドライバーは SQL Server の既定の結果セットを使用します。 既定の結果セットは、SQL Server でサポートされている任意の SQL ステートメントに使用でき、結果セット全体をクライアントに転送する最も効率的な方法です。
SQL Server 2005 (9.x) では、複数のアクティブな結果セット (MARS) のサポートが導入されました。アプリケーションは、接続ごとに複数のアクティブな既定の結果セットを持つようになりました。 MARS は既定では有効になっていません。
SQL Server 2005 (9.x) より前では、既定の結果セットでは、同じ接続で複数のアクティブなステートメントがサポートされていませんでした。 接続で SQL ステートメントが実行された後、サーバーは、結果セット内のすべての行が処理されるまで、その接続上のクライアントからのコマンド (結果セットの残りの部分を取り消す要求を除く) を受け入れません。 部分的に処理された結果セットの残りの部分を取り消すには、 SQLCloseCursor または SQLFreeStmt fOption パラメーターをSQL_CLOSEに設定して呼び出します。 部分的に処理された結果セットを終了し、別の結果セットが存在することをテストするには、 SQLMoreResults を呼び出します。 既定の結果セットが完全に処理される前に ODBC アプリケーションが接続ハンドルに対してコマンドを試行すると、呼び出しによってSQL_ERRORが生成され、 SQLGetDiagRec の呼び出しが返されます 。
szSqlState: "HY000", pfNativeError: 0
szErrorMsg: "[Microsoft][SQL Server Native Client]
Connection is busy with results for another hstmt."