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

Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse Analytics AnalyticsPlatform 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 Native Client предоставляет параметр 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 Native Client получает эти сообщения, он возвращает SQL_SUCCESS_WITH_INFO, чтобы сообщить приложению о доступности информационных сообщений. Затем приложение может вызвать SQLGetDiagRec для получения этих сообщений. Инструкции Transact-SQL, которые работают таким образом:

  • DBCC

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

  • SET STATISTICS

  • PRINT

  • RAISERROR

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

Чтобы обработать результирующие наборы инструкции SQL, приложение выполняет следующие действия.

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

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

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

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

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

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

См. также:

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