次の方法で共有


SQL Server の既定の結果セットの使用

適用対象: SQL Server Azure SQL Database 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 ステートメントが 1 つの接続で実行された後、サーバーは結果セットのすべての行が処理されるまで、その接続に対するクライアントからのコマンドを受け付けません (結果セットの残りの行の処理を取り消す要求は除きます)。 部分的に処理された結果セットの残りの部分を取り消すには、 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."  

参照

カーソルの実装方法