Tamaño del conjunto de filas del cursor
Se aplica a: SQL Server Azure SQL Database Azure SQL Instancia administrada Azure Synapse Analytics Analytics Platform System (PDW)
Los cursores ODBC no están limitados a capturar una fila cada vez. Pueden recuperar varias filas en cada llamada a SQLFetch o SQLFetchScroll. Cuando trabaja con una base de datos de cliente o servidor como Microsoft SQL Server, es más eficaz capturar varias filas a la vez. El número de filas devueltas en una captura se denomina tamaño del conjunto de filas y se especifica mediante la SQL_ATTR_ROW_ARRAY_SIZE de SQLSetStmtAttr.
SQLUINTEGER uwRowsize;
SQLSetStmtAttr(m_hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)uwRowsetSize, SQL_IS_UINTEGER);
Los cursores con un tamaño del conjunto de filas mayor que 1 reciben el nombre de cursores de bloque.
Hay dos opciones para enlazar las columnas de conjunto de resultados para los cursores de bloque:
Enlace de modo de columna
Cada columna se enlaza a una matriz de variables. Cada matriz tiene el mismo número de elementos que el tamaño del conjunto de filas.
Enlace de modo de fila
Una matriz se genera mediante estructuras que contienen los datos e indicadores para todas las columnas de una fila. La matriz tiene el mismo número de estructuras que el tamaño del conjunto de filas.
Cuando se usa un enlace de columnas o de fila, cada llamada a SQLFetch o SQLFetchScroll rellena las matrices enlazadas con datos del conjunto de filas recuperado.
SQLGetData también se puede usar para recuperar datos de columna de un cursor de bloque. Dado que SQLGetData funciona una fila a la vez, se debe llamar a SQLSetPos para establecer una fila específica en el conjunto de filas como la fila actual antes de llamar a SQLGetData.
El controlador ODBC de SQL Server Native Client ofrece una optimización mediante conjuntos de filas para recuperar rápidamente un conjunto de resultados completo. Para usar esta optimización, establezca los atributos de cursor en sus valores predeterminados (solo avance, de solo lectura, tamaño de conjunto de filas = 1) en el momento en que se llama a SQLExecDirect o SQLExecute . El controlador ODBC de SQL Server Native Client configura un conjunto de resultados predeterminado. Esto es más eficaz que los cursores de servidor al transferir los resultados al cliente sin desplazarse. Después de ejecutar la instrucción, aumente el tamaño del conjunto de filas y use el enlace de modo de columna o de modo de fila. Esto permite que SQL Server use un conjunto de resultados predeterminado para enviar filas de resultados de forma eficaz al cliente, mientras que el controlador ODBC de SQL Server Native Client extrae continuamente filas de los búferes de red en el cliente.