@@FETCH_STATUS (Transact-SQL)
Возвращает состояние последней инструкции FETCH курсора, запущенной в отношении любого курсора, который в настоящий момент открыт соединением.
Синтаксические обозначения Transact-SQL
Синтаксис
@@FETCH_STATUS
Тип возвращаемых данных
integer
Возвращаемое значение
Возвращаемое значение |
Описание |
---|---|
0 |
Инструкция FETCH была выполнена успешно. |
-1 |
Выполнение инструкции FETCH завершилось неудачно или строка оказалась вне пределов результирующего набора. |
-2 |
Выбранная строка отсутствует. |
Замечания
Поскольку функция @@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