@@FETCH_STATUS (Transact-SQL)
Применимо к:База данных
SQL Server Azure SQL Управляемый экземпляр SQL Azure
Эта функция возвращает состояние последней инструкции FETCH, вызванной в любом курсоре, открытом в рамках этого подключения.
Соглашения о синтаксисе Transact-SQL
Синтаксис
@@FETCH_STATUS
Примечание
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Тип возвращаемых данных
integer
Возвращаемое значение
Возвращаемое значение | Описание |
---|---|
0 | Инструкция FETCH была выполнена успешно. |
-1 | Выполнение инструкции FETCH завершилось неудачно или строка оказалась вне пределов результирующего набора. |
-2 | Выбранная строка отсутствует. |
–9 | Курсор не выполняет операцию выборки. |
Комментарии
Глобальный статус @@FETCH_STATUS
для всех курсоров в рамках подключения предполагает внимательное использование. После выполнения инструкции FETCH следует выполнить тест для @@FETCH_STATUS
, прежде чем любая другая инструкция FETCH будет выполнена применительно к другому курсору. @@FETCH_STATUS
не определяется до выполнения выборки в рамках подключения.
Например, пользователь выполняет инструкцию FETCH из одного курсора, а затем вызывает хранимую процедуру, которая открывает и обрабатывает результаты из другого курсора. Когда управление возвращается от вызванной хранимой процедуры, @@FETCH_STATUS
отражает результаты последней инструкции FETCH, выполненной в хранимой процедуре, а не результаты инструкции FETCH, выполненной до вызова хранимой процедуры.
Чтобы получить состояние последней выборки конкретного курсора, запросите столбец fetch_status функции динамического управления sys.dm_exec_cursors.
Примеры
В этом примере используется @@FETCH_STATUS
для управления действиями курсора в цикле WHILE
.
DECLARE Employee_Cursor CURSOR FOR
SELECT BusinessEntityID, JobTitle
FROM AdventureWorks2012.HumanResources.Employee;
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Employee_Cursor;
END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO
См. также
Функции работы с курсорами (Transact-SQL)
FETCH (Transact-SQL)