次の方法で共有


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

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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 は既定では有効になっていません。

2005 (9.x) SQL Serverより前は、既定の結果セットでは、同じ接続で複数のアクティブなステートメントがサポートされていませんでした。 SQL ステートメントが 1 つの接続で実行された後、サーバーは結果セットのすべての行が処理されるまで、その接続に対するクライアントからのコマンドを受け付けません (結果セットの残りの行の処理を取り消す要求は除きます)。 部分的に処理された結果セットの残りの部分を取り消すには、fOption パラメーターを SQL_CLOSE に設定して SQLCloseCursor または SQLFreeStmt を呼び出します。 部分的に処理された結果セットを終了し、別の結果セットが存在することをテストするには、 SQLMoreResults を呼び出します。 既定の結果セットが完全に処理される前に ODBC アプリケーションが接続ハンドルでコマンドを試行すると、呼び出しによってSQL_ERRORが生成され、 SQLGetDiagRec の呼び出しは次を返します。

szSqlState: "HY000", pfNativeError: 0  
szErrorMsg: "[Microsoft][SQL Server Native Client]  
                Connection is busy with results for another hstmt."  

参照

カーソルの実装方法