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


sp_describe_cursor (Transact-SQL)

Область применения: SQL Server

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

Соглашения о синтаксисе Transact-SQL

Синтаксис

sp_describe_cursor
    [ @cursor_return = ] cursor_return OUTPUT
    , [ @cursor_source = ] { N'local' | N'global' | N'*cursor_source*' }
    , [ @cursor_identity = ] N'cursor_identity'
[ ; ]

Аргументы

[ @cursor_return = ] cursor_return OUTPUT

Имя объявленной переменной курсора для получения выходных данных курсора. @cursor_return — это параметр OUTPUT типа int без значения по умолчанию и не должен быть связан с курсорами во время sp_describe_cursor вызова. Возвращаемый курсор является прокручиваемым, динамическим и доступным только для чтения.

[ @cursor_source = ] { N'local' | N'global' | N'cursor_source' }

Указывает, указан ли курсор, на который указывается, с помощью имени локального курсора, глобального курсора или переменной курсора. @cursor_source — nvarchar(30), без значения по умолчанию.

[ @cursor_identity = ] N'cursor_identity'

Имя курсора, созданного инструкцией DECLARE CURSOR . @cursor_identity — nvarchar(128), без значения по умолчанию.

  • Если курсор имеет ключевое LOCAL слово или по умолчанию LOCALимеет значение , @cursor_identity .local

  • Если курсор имеет ключевое GLOBAL слово или по умолчанию GLOBALимеет значение , @cursor_identity .global @cursor_identity также может быть именем курсора сервера API, открываемого приложением ODBC, а затем именованным путем вызоваSQLSetCursorName.

  • В противном случае @cursor_identity — это имя переменной курсора, связанной с открытым курсором.

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

Нет.

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

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

В следующей таблице показан формат курсора, возвращаемого с помощью sp_describe_cursor. Формат курсора совпадает с форматом, возвращаемым с помощью sp_cursor_list.

Имя столбца Тип данных Description
reference_name sysname Имя, используемое для ссылки на курсор. Если ссылка на курсор была через имя, указанное в DECLARE CURSOR инструкции, имя ссылки совпадает с именем курсора. Если ссылка на курсор осуществлялась через переменную, имя ссылки совпадает с именем переменной.
cursor_name sysname Имя курсора из инструкции DECLARE CURSOR . Если курсор был создан путем установки переменной курсора на курсор, cursor_name возвращает имя переменной курсора. В более ранних версиях SQL Server этот выходной столбец возвращает имя, созданное системой.
cursor_scope tinyint 1 = LOCAL
2 = GLOBAL
status int Те же значения, что и системная CURSOR_STATUS функция:

1 = курсор, на который ссылается имя курсора или переменная, открыт. Если курсор не учитывается, статический или набор ключей, это по крайней мере одна строка. Если курсор динамический, результирующий набор имеет ноль или более строк.
0 = курсор, на который ссылается имя или переменная курсора, открыт, но не имеет строк. Динамические курсоры не возвращают это значение.
-1 = курсор, на который ссылается имя курсора или переменная, закрывается.
-2 = применяется только к переменным курсора. Для переменной не назначен курсор. Возможно, OUTPUT параметр назначил курсор переменной, но хранимая процедура закрыла курсор перед возвратом.
-3 = курсор или переменная курсора с указанным именем не существует, или в переменной курсора нет выделенного курсора.
model tinyint 1 = нечувствительный (или статический)
2 = набор ключей
3 = Dynamic
4= Быстрая прокрутка
concurrency tinyint 1 = только для чтения
2 = блокировки прокрутки
3 = оптимистичный
scrollable tinyint 0 = только пересылка
1 = прокручиваемая
open_status tinyint 0 = закрыто
1 = Открыть
cursor_rows decimal(10,0) Количество выбранных строк в результирующем наборе. Дополнительные сведения см. в @@CURSOR_ROWS.
fetch_status smallint Состояние последней выборки данного курсора. Дополнительные сведения см. в @@FETCH_STATUS.

0 = успешное получение.
-1 = сбой получения или выходит за пределы курсора.
-2 = запрошенная строка отсутствует.
-9 = на курсоре не было получено никаких ошибок.
column_count smallint Количество столбцов в результирующем наборе курсора.
row_count decimal(10,0) Количество строк, затронутых последней операцией курсора. Дополнительные сведения см. в @@ROWCOUNT.
last_operation tinyint Последняя операция, выполненная над курсором.

0 = на курсоре не выполнялись никаких операций.
1 = OPEN
2 = FETCH
3 = INSERT
4 = UPDATE
5 = DELETE
6 = CLOSE
7 = DEALLOCATE
cursor_handle int Уникальное значение для курсора в пределах сервера.

Замечания

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

Инструкция DECLARE CURSOR может запросить тип курсора, который SQL Server не может поддерживать с помощью SELECT инструкции, содержащейся в нем DECLARE CURSOR. SQL Server неявно преобразует курсор в тип, который может поддерживаться с помощью инструкции SELECT . Если TYPE_WARNING указан в DECLARE CURSOR инструкции, SQL Server отправляет приложению информационное сообщение о завершении преобразования. sp_describe_cursor затем можно вызвать, чтобы определить тип реализованного курсора.

Разрешения

Необходимо быть членом роли public.

Примеры

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

USE AdventureWorks2022;
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR STATIC FOR
SELECT LastName
FROM Person.Person;

OPEN abc;

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

-- Execute sp_describe_cursor into the cursor variable.
EXEC master.dbo.sp_describe_cursor
    @cursor_return = @Report OUTPUT,
    @cursor_source = N'global',
    @cursor_identity = N'abc';

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

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

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