次の方法で共有


カーソルの行セット サイズ

適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

ODBC カーソルでは、一度にフェッチできる行数は制限されません。 SQLFetch または SQLFetchScroll の呼び出しごとに複数の行を取得できます。 Microsoft SQL Server などのクライアント/サーバー データベースを使用する場合は、一度に複数の行をフェッチする方が効率的です。 フェッチで返される行数は行セット サイズと呼ばれ、 SQLSetStmtAttr のSQL_ATTR_ROW_ARRAY_SIZEを使用して指定されます。

SQLUINTEGER uwRowsize;  
SQLSetStmtAttr(m_hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)uwRowsetSize, SQL_IS_UINTEGER);  

行セット サイズが 2 以上のカーソルをブロック カーソルと呼びます。

ブロック カーソルの結果セット列は、次の 2 つの方法でバインドできます。

  • 列方向のバインド

    各列が変数の配列にバインドされます。 各配列には行セット サイズと同じ数の要素が含まれます。

  • 行方向のバインディング

    1 行のすべての列のデータとインジケーターが含まれる構造体を使用して配列が構築されます。 この配列には行セット サイズと同じ数の構造体が含まれます。

列方向または行方向のバインディングを使用する場合、SQLFetch または SQLFetchScroll を呼び出すたびにバインドされた配列に、取得した行セットのデータが格納されます。

SQLGetData を使用して、ブロック カーソルから列データを取得することもできます。 SQLGetData は一度に 1 行ずつ動作するため、SQLSetPos を呼び出して、SQLGetData を呼び出す前に行セット内の特定の行を現在の行として設定する必要があります。

SQL Server Native Client ODBC ドライバーは、行セットを使用して最適化を提供し、結果セット全体をすばやく取得します。 この最適化を使用するには、 SQLExecDirect または SQLExecute が呼び出されるときに、カーソル属性を既定値 (前方専用、読み取り専用、行セット サイズ = 1) に設定します。 SQL Server Native Client ODBC ドライバーは、既定の結果セットを設定します。 スクロールを使用しないでクライアントに結果を送信する場合は、既定の結果セットの方がサーバー カーソルよりも効率的です。 ステートメントを実行後、行セット サイズを増やし、列方向のバインドか行方向のバインドを使用します。 これにより、SQL Server では既定の結果セットを使用して結果行を効率的にクライアントに送信できます。一方、SQL Server Native Client ODBC ドライバーは、クライアント上のネットワーク バッファーから継続的に行をプルします。

参照

カーソルのプロパティ