Обработка результатов (ODBC)
После передачи приложением инструкции 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 (ODBC)