sp_cursor_list (Transact-SQL)

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

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

Синтаксис

sp_cursor_list [ @cursor_return = ] cursor_variable_name OUTPUT 
          , [ @cursor_scope = ] cursor_scope
[;]

Аргументы

  • [ @cursor_return = ] cursor_variable_nameOUTPUT
    Имя переменной объявленного курсора. Аргумент cursor_variable_name имеет тип cursor и не имеет значения по умолчанию. Этот аргумент является динамическим, прокручиваемым и предназначенным только для чтения.

  • [ @cursor_scope = ] cursor_scope
    Указывает уровень курсоров для отчета. Аргумент cursor_scope имеет тип int, не имеет значения по умолчанию и может иметь одно из следующих значений.

    Значение

    Описание

    1

    Представить все локальные курсоры.

    2

    Представить все глобальные курсоры.

    3

    Представить как локальные, так и глобальные курсоры.

Значения кодов возврата

Нет

Возвращенные курсоры

Хранимая процедура sp_cursor_list возвращает свой отчет в виде выходного параметра-курсора Transact-SQL, не в виде результирующего набора. Позволяет пакетам, хранимым процедурам и триггерам Transact-SQL работать с выходными данными по одной строке за раз. Это также означает, что процедуру нельзя вызвать напрямую из API-функций базы данных. Выходной параметр-курсор должен быть привязан к программной переменной, но API-интерфейсы баз данных не поддерживают привязку параметров-курсоров или переменных.

Формат курсора, возвращаемого хранимой процедурой sp_cursor_list. Формат курсора такой же, как и формат, возвращаемый хранимой процедурой sp_describe_cursor.

Имя столбца

Тип данных

Описание

reference_name

sysname

Имя, используемое для ссылки на курсор. Если ссылка на курсор осуществлялась по имени, приведенном в инструкции DECLARE CURSOR, то имя ссылки и имя курсора одинаковы. Если ссылка на курсор осуществлялась при помощи переменной, именем ссылки является имя переменной курсора.

cursor_name

sysname

Имя курсора из инструкции DECLARE CURSOR. В SQL Server, если курсор создан с помощью присваивания переменной курсора, cursor_name возвращает имя переменной курсора. В предыдущих выпусках этот выходной столбец возвращает имя, созданное системой.

cursor_scope

smallint

1 = LOCAL

2 = GLOBAL

status

smallint

Те же значения, какие представлены системной функцией CURSOR_STATUS.

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

0 = курсор, указанный ссылкой в имени или переменной курсора, открыт, но не имеет строк. Динамические курсоры не возвращают это значение.

-1 = курсор, указанный ссылкой в имени или переменной курсора, закрывается.

-2 = применимо только к переменным курсора. Нет курсора, назначенного переменной. Возможно, параметр OUTPUT назначил курсор переменной, но хранимая процедура закрыла курсор перед возвратом.

-3 = курсор или переменная курсора с заданным именем не существует либо переменной не выделен курсор.

model

smallint

1 = нечувствительный (или статичный)

2 = набор ключей

3 = динамический

4 = перемотка вперед

concurrency

smallint

1 = только для чтения

2 = блокирование прокрутки

3 = оптимистический

scrollable

smallint

0 = Только вперед

1 = Возможна прокрутка

open_status

smallint

0 = Закрыт

1 = Открыт

cursor_rows

int

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

fetch_status

smallint

Состояние последней выборки по данному курсору. Дополнительные сведения см. в разделе @@FETCH_STATUS:

0 = выборка завершена успешно.

-1 = выборка завершена с ошибкой или вышла за пределы курсора.

-2 = запрошенная строка отсутствует.

-9 = выборка по курсору не произведена.

column_count

smallint

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

row_count

smallint

Количество строк, затронутых последней операцией с курсором. Дополнительные сведения см. в разделе @@ROWCOUNT.

last_operation

smallint

Последняя операция, выполненная с данным курсором:

0 = операции над курсором не выполнялись

1 = OPEN

2 = FETCH

3 = INSERT

4 = UPDATE

5 = DELETE

6 = CLOSE

7 = DEALLOCATE

cursor_handle

int

Уникальное значение, определяющее курсор в пределах области сервера.

Замечания

Хранимая процедура sp_cursor_list представляет список текущих серверных курсоров, открытых соединением, и описывает атрибуты, являющиеся глобальными по отношению к каждому курсору, такие как возможность прокрутки и обновления курсора. Курсоры, представленные в хранимой процедуре sp_cursor_list, включают:

  • серверные курсоры Transact-SQL;

  • серверные курсоры API, открывающиеся приложением ODBC, которое затем называется SQLSetCursorName для именования курсора.

Используйте процедуру sp_describe_cursor_columns для описания атрибутов результирующего набора, возвращаемого курсором. Используйте хранимую процедуру sp_describe_cursor_tables для отчета по базовым таблицам, на которые ссылается курсор. Хранимая процедура sp_describe_cursor предоставляет такие же сведения, как и процедура sp_cursor_list, но только для определенного курсора.

Разрешения

Разрешения на выполнение по умолчанию принадлежит роли public.

Примеры

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

USE AdventureWorks2008R2;
GO
-- Declare and open a keyset-driven cursor.
DECLARE abc CURSOR KEYSET FOR
SELECT LastName
FROM Person.Person
WHERE LastName LIKE 'S%';
OPEN abc;

-- Declare a cursor variable to hold the cursor output variable
-- from sp_cursor_list.
DECLARE @Report CURSOR;

-- Execute sp_cursor_list into the cursor variable.
EXEC master.dbo.sp_cursor_list @cursor_return = @Report OUTPUT,
      @cursor_scope = 2;

-- Fetch all the rows from the sp_cursor_list output cursor.
FETCH NEXT from @Report;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
   FETCH NEXT from @Report;
END

-- Close and deallocate the cursor from sp_cursor_list.
CLOSE @Report;
DEALLOCATE @Report;
GO

-- Close and deallocate the original cursor.
CLOSE abc;
DEALLOCATE abc;
GO