Tamanho do Conjunto de Linhas do Cursor

Aplica-se a:SQL ServerBase de Dados SQL do AzureInstância Gerida do Azure SQLAzure Synapse Analytics

Os cursores ODBC não se limitam a buscar uma linha de cada vez. Podem recuperar várias linhas em cada chamada para SQLFetch ou SQLFetchScroll. Quando se trabalha com uma base de dados cliente/servidor, como o Microsoft SQL Server, é mais eficiente buscar várias linhas ao mesmo tempo. O número de linhas devolvidas num fetch é chamado de tamanho do conjunto de linhas e é especificado usando o SQL_ATTR_ROW_ARRAY_SIZE do SQLSetStmtAttr.

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

Cursores com um conjunto de linhas maior que 1 são chamados cursores de bloco.

Existem duas opções para atribuir colunas do conjunto de resultados para cursores de bloco:

  • Encadernação coluna a coluna

    Cada coluna está ligada a um array de variáveis. Cada array tem o mesmo número de elementos que o tamanho do conjunto de linhas.

  • Encadernação por filas

    Um array é construído usando estruturas que armazenam os dados e indicadores de todas as colunas numa linha. O array tem o mesmo número de estruturas que o tamanho do conjunto de linhas.

Quando é usada ligação coluna a coluna ou a linha, cada chamada ao SQLFetch ou SQLFetchScroll preenche os arrays limitados com dados do conjunto de linhas recuperado.

O SQLGetData também pode ser usado para recuperar dados de colunas de um cursor por blocos. Como o SQLGetData funciona uma linha de cada vez, o SQLSetPos deve ser chamado para definir uma linha específica no conjunto de linhas como a linha atual antes de chamar o SQLGetData.

O driver ODBC do SQL Server Native Client oferece uma otimização usando conjuntos de linhas para recuperar rapidamente todo um conjunto de resultados. Para usar esta otimização, defina os atributos do cursor para os seus valores predefinidos (apenas para frente, só leitura, tamanho do conjunto de linhas = 1) no momento em que SQLExecDirect ou SQLExecute for chamado. O driver ODBC do SQL Server Native Client configura um conjunto de resultados predefinido. Isto é mais eficiente do que os cursores do servidor ao transferir resultados para o cliente sem necessidade de scroll. Depois de a instrução ter sido executada, aumente o tamanho do conjunto de linhas e use a ligação coluna a coluna ou a linha. Isto permite ao SQL Server usar um conjunto de resultados predefinido para enviar linhas de resultados de forma eficiente ao cliente, enquanto o driver ODBC do SQL Server Native Client retira continuamente linhas dos buffers de rede do cliente.