Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Эта функция возвращает состояние последней инструкции FETCH, вызванной в любом курсоре, открытом в рамках этого подключения.
Соглашения о синтаксисе Transact-SQL
Синтаксис
@@FETCH_STATUS
Тип возвращаемых данных
integer
Возвращаемое значение
| Возвращаемое значение | Description |
|---|---|
| 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 AdventureWorks2022.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