Поделиться через


CURSOR_STATUS (Transact-SQL)

Скалярная функция, позволяющая сущности, вызвавшей хранимую процедуру, определить, вернула ли процедура курсор и результирующий набор для конкретного аргумента.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

CURSOR_STATUS 
          (
               { 'local' , 'cursor_name' } 
          | { 'global' , 'cursor_name' } 
          | { 'variable' , 'cursor_variable' } 
          )

Аргументы

  • 'local'
    Константа, показывающая, что источник курсора — это имя локального курсора.

  • 'cursor_name'
    Имя курсора. Имя курсора должно соответствовать требованиям, предъявляемым к идентификаторам.

  • 'global'
    Константа, показывающая, что источник курсора — это имя глобального курсора.

  • 'variable'
    Константа, показывающая, что источник курсора — это локальная переменная.

  • 'cursor_variable'
    Имя переменной курсора. Переменная курсора должна быть определена с типом данных cursor.

Тип возвращаемых данных

smallint

Возвращаемое значение

Имя курсора

Переменная курсора

1

Результирующий набор курсора включает как минимум одну строку.

В случае статических и управляемых набором ключей курсоров результирующий набор включает как минимум одну строку.

В случае динамических курсоров результирующий набор может включать одну или более строк или не включать их.

Курсор, выделенный этой переменной, открыт.

В случае статических и управляемых набором ключей курсоров результирующий набор включает как минимум одну строку.

В случае динамических курсоров результирующий набор может включать одну или более строк или не включать их.

0

Результирующий набор курсора пуст.*

Курсор, выделенный этой переменной, открыт, но результирующий набор пуст.*

-1

Курсор закрыт.

Курсор, выделенный этой переменной, закрыт.

-2

Не применимо.

Возможны следующие варианты:

ранее вызванная процедура не назначила этой переменной с аргументом OUTPUT никакой курсор;

ранее вызванная процедура назначила этой переменной с аргументом OUTPUT курсор, но при завершении процедуры он находился в закрытом состоянии. Таким образом, курсор освобождается и не возвращается вызвавшей процедуре.

Объявленной переменной курсора никакой курсор не назначен.

-3

Курсор с указанным именем не существует.

Переменная курсора с указанным именем не существует или существует, но ей еще не выделен курсор.

*Динамические курсоры никогда не возвращают этот результат.

Примеры

В следующем примере используется функция CURSOR_STATUS для отображения состояния курсора до и после его открытия и закрытия.

CREATE TABLE #TMP
(
   ii int
)
GO

INSERT INTO #TMP(ii) VALUES(1)
INSERT INTO #TMP(ii) VALUES(2)
INSERT INTO #TMP(ii) VALUES(3)

GO

--Create a cursor.
DECLARE cur CURSOR
FOR SELECT * FROM #TMP

--Display the status of the cursor before and after opening
--closing the cursor.

SELECT CURSOR_STATUS('global','cur') AS 'After declare'
OPEN cur
SELECT CURSOR_STATUS('global','cur') AS 'After Open'
CLOSE cur
SELECT CURSOR_STATUS('global','cur') AS 'After Close'

--Remove the cursor.
DEALLOCATE cur

--Drop the table.
DROP TABLE #TMP

Ниже приводится результирующий набор.

После объявления

---------------

-1

После открытия

----------

1

После закрытия

-----------

-1