Поделиться через


Обработка результатов (ODBC)

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)

После отправки инструкции SQL SQL Server возвращает все результирующие данные в виде одного или нескольких результирующих наборов. Результирующий набор — это набор строк и столбцов, соответствующих критерию запроса. Инструкции SELECT, функции работы с каталогами и некоторые хранимые процедуры создают результирующий набор, доступный для приложения в табличной форме. Если выполняемая инструкция SQL является хранимой процедурой, пакетом из нескольких команд либо инструкцией SELECT, содержащей ключевые слова, то необходимо выполнять обработку нескольких результирующих наборов.

Функции ODBC для работы с каталогами также могут получать данные. Например, SQLColumns извлекает данные о столбцах в источнике данных. Эти результирующие наборы могут содержать нуль или более строк.

Некоторые инструкции SQL, например GRANT или REVOKE, не возвращают результирующие наборы. Для этих инструкций код возврата из SQLExecute или SQLExecDirect обычно является единственным признаком успешного выполнения инструкции.

Каждая из инструкций INSERT, UPDATE и DELETE возвращает результирующий набор, содержащий только количество строк, затронутых изменением. Это число становится доступным при вызове SQLRowCount приложения. ODBC 3.Приложения x должны вызывать SQLRowCount , чтобы получить результирующий набор или SQLMoreResults , чтобы отменить его. Когда приложение выполняет пакетную или хранимую процедуру, содержащую несколько инструкций INSERT, UPDATE или DELETE, результирующий набор из каждой инструкции изменения должен обрабатываться с помощью SQLRowCount или отмены с помощью SQLMoreResults. Эти счетчики можно сбросить, включив в пакет или хранимую процедуру инструкцию SET NOCOUNT ON.

Transact-SQL включает инструкцию SET NOCOUNT. Если параметр NOCOUNT установлен, SQL Server не возвращает количество строк, затронутых инструкцией, и SQLRowCount возвращает значение 0. Версия драйвера ODBC для собственного клиента SQL Server представляет параметр SQLGetStmtAttr для конкретного драйвера, SQL_SOPT_SS_NOCOUNT_STATUS, чтобы сообщить о том, включен или отключен параметр NOCOUNT. Когда SQLRowCount возвращает значение 0, приложение должно тестировать SQL_SOPT_SS_NOCOUNT_STATUS. Если возвращается SQL_NC_ON, значение 0 из SQLRowCount указывает, что SQL Server не вернул число строк. Если возвращается SQL_NC_OFF, это означает, что NOCOUNT отключен и значение 0 из SQLRowCount указывает, что инструкция не повлияла на строки. Приложения не должны отображать значение SQLRowCount , если SQL_SOPT_SS_NOCOUNT_STATUS SQL_NC_OFF. Большие пакеты или хранимые процедуры могут содержать несколько инструкций SET NOCOUNT, следовательно, программисты не должны предполагать, что параметр SQL_SOPT_SS_NOCOUNT_STATUS останется неизменным. Параметр должен проверяться каждый раз, когда SQLRowCount возвращает значение 0.

Несколько других инструкций Transact-SQL возвращают данные в сообщениях, а не в результирующих наборах. Когда драйвер ODBC собственного клиента SQL Server получает эти сообщения, он возвращает SQL_SUCCESS_WITH_INFO, чтобы сообщить приложению, что информационные сообщения доступны. Затем приложение может вызвать SQLGetDiagRec для получения этих сообщений. Инструкции Transact-SQL, которые работают таким образом:

  • DBCC

  • SET SHOWPLAN (доступна в ранних версиях SQL Server)

  • SET STATISTICS

  • PRINT

  • RAISERROR

Драйвер ODBC собственного клиента SQL Server возвращает SQL_ERROR в RAISERROR с серьезностью 11 или выше. При уровне серьезности RAISERROR от 19 и выше соединение отключается.

Чтобы обработать результирующие наборы из инструкции SQL, приложение:

  • Определяет характеристики результирующего набора.

  • Привязывает столбцы к переменным программы.

  • Получает одно значение, целую строку значений, или несколько строк значений.

  • Проверяет наличие результирующих наборов, и в случае их существования, начинает цикл снова для определения характеристик нового результирующего набора.

Процесс получения строк из источника данных и передачи их в приложение называется выборкой.

В этом разделе

См. также

SQL Server Native Client (ODBC)
Инструкции по обработке результатов (ODBC)