Processando resultados (ODBC)
Depois que um aplicativo envia uma instrução SQL, SQL Server retorna todos os dados resultantes como um ou mais conjuntos de resultados. Um conjunto de resultados é um conjunto de linhas e colunas que correspondem aos critérios da consulta. As instruções SELECT, funções de catálogo e alguns procedimentos armazenados geram um conjunto de resultados disponibilizado para um aplicativo no formato tabular. Se a instrução SQL executada for um procedimento armazenado, um lote contendo vários comandos ou uma instrução SELECT contendo palavras-chave, haverá vários conjuntos de resultados a serem processados.
As funções de catálogo ODBC também podem recuperar dados. Por exemplo, SQLColumns recupera dados sobre colunas na fonte de dados. Esses conjuntos de resultados podem conter zero ou mais linhas.
Outras instruções SQL, como GRANT ou REVOKE, não retornam conjuntos de resultados. Para essas instruções, o código de retorno de SQLExecute ou SQLExecDirect geralmente é a única indicação de que a instrução foi bem-sucedida.
Cada instrução INSERT, UPDATE e DELETE retorna um conjunto de resultados que contém apenas o número de linhas afetado pela modificação. Essa contagem é disponibilizada quando o aplicativo chama SQLRowCount. ODBC 3. x aplicativos devem chamar SQLRowCount para recuperar o conjunto de resultados ou SQLMoreResults para cancelá-lo. Quando um aplicativo executa um lote ou procedimento armazenado que contém várias instruções INSERT, UPDATE ou DELETE, o conjunto de resultados de cada instrução de modificação deve ser processado usando SQLRowCount ou cancelado usando SQLMoreResults. Essas contagens podem ser canceladas incluindo uma instrução SET NOCOUNT ON no lote ou no procedimento armazenado.
O Transact-SQL inclui a instrução SET NOCOUNT. Quando a opção NOCOUNT é definida como ativada, SQL Server não retorna as contagens das linhas afetadas por uma instrução e SQLRowCount retorna 0. A versão do driver ODBC SQL Server Native Client apresenta uma opção SQLGetStmtAttr específica do driver, SQL_SOPT_SS_NOCOUNT_STATUS, para relatar se a opção NOCOUNT está ativada ou desativada. Sempre que SQLRowCount retornar 0, o aplicativo deverá testar SQL_SOPT_SS_NOCOUNT_STATUS. Se SQL_NC_ON for retornado, o valor de 0 de SQLRowCount indicará apenas que SQL Server não retornou uma contagem de linhas. Se SQL_NC_OFF for retornado, isso significa que NOCOUNT está desativado e o valor de 0 de SQLRowCount indica que a instrução não afetou nenhuma linha. Os aplicativos não devem exibir o valor de SQLRowCount quando SQL_SOPT_SS_NOCOUNT_STATUS é SQL_NC_OFF. Lotes ou procedimentos armazenados grandes podem conter várias instruções SET NOCOUNT, de forma que os programadores não podem supor que SQL_SOPT_SS_NOCOUNT_STATUS permaneça constante. A opção deve ser testada sempre que SQLRowCount retornar 0.
Várias outras instruções Transact-SQL retornam seus dados em mensagens e não em conjuntos de resultados. Quando o SQL Server Native Client driver ODBC recebe essas mensagens, ele retorna SQL_SUCCESS_WITH_INFO para informar ao aplicativo que mensagens informativas estão disponíveis. Em seguida, o aplicativo pode chamar SQLGetDiagRec para recuperar essas mensagens. As instruções Transact-SQL que funcionam dessa maneira são:
DBCC
SET SHOWPLAN (disponível com versões anteriores do SQL Server)
SET STATISTICS
PRINT
RAISERROR
O driver ODBC SQL Server Native Client retorna SQL_ERROR em um RAISERROR com uma severidade de 11 ou mais. Se a severidade do RAISERROR for 19 ou superior, a conexão também será descartada.
Para processar os conjuntos de resultados a partir de uma instrução SQL, o aplicativo:
Determina as características do conjunto de resultados.
Associa as colunas às variáveis do programa.
Recupera um único valor, uma linha inteira de valores ou várias linhas de valores.
Testa se há mais conjuntos de resultados e, se houver, faz loops de volta para determinar as características do novo conjunto de resultados.
O processo de recuperação de linhas da fonte de dados e de seu retorno ao aplicativo é chamado de busca.
Nesta seção
Consulte Também
SQL Server Native Client (ODBC)
Tópicos de instrução sobre processamento de resultados (ODBC)