sp_describe_cursor (Transact-SQL)

Применимо к:SQL Server

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

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

Синтаксис

  
sp_describe_cursor [ @cursor_return = ] output_cursor_variable OUTPUT   
     { [ , [ @cursor_source = ] N'local'  
    , [ @cursor_identity = ] N'local_cursor_name' ]   
   | [ , [ @cursor_source = ] N'global'  
    , [ @cursor_identity = ] N'global_cursor_name' ]   
   | [ , [ @cursor_source = ] N'variable'  
     , [ @cursor_identity = ] N'input_cursor_variable' ]   
     }   
[;]  

Аргументы

[ ] @cursor_return=output_cursor_variable ВЫХОДНЫЕ ДАННЫЕ
Имя объявленной переменной для получения выходных данных курсора. output_cursor_variable является курсором без значения по умолчанию и не должен быть связан с какими-либо курсорами во время вызова sp_describe_cursor. Возвращаемый курсор является прокручиваемым, динамическим и доступным только для чтения.

[ ] @cursor_source= { N'local' | N'global' | N'variable' }
Указывает, задан ли возвращаемый курсор с помощью имени локального курсора, глобального курсора или курсорной переменной. Параметр — nvarchar(30).

[ ] @cursor_identity= N'local_cursor_name' ]
Имя курсора, созданного инструкцией DECLARE CURSOR с ключевым словом LOCAL или параметром LOCAL по умолчанию. local_cursor_name — nvarchar(128).

[ ] @cursor_identity= N'global_cursor_name' ]
Имя курсора, созданного инструкцией DECLARE CURSOR с ключевым словом GLOBAL или параметром GLOBAL по умолчанию. global_cursor_name — nvarchar(128).

global_cursor_name также может быть именем курсора сервера API, который открывается приложением ODBC, которое затем называется путем вызова SQLSetCursorName.

[ ] @cursor_identity= N'input_cursor_variable' ]
Имя переменной курсора, связанной с открытым курсором. input_cursor_variable — nvarchar(128).

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

None

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

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

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

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

2 = GLOBAL
состояние int Те же значения, которые получены с помощью системной функции CURSOR_STATUS.

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

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

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

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

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

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

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

4 = перемотка вперед
параллелизм tinyint 1 = только для чтения

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

3 = оптимистический
scrollable tinyint 0 = только вперед

1 = возможна прокрутка
open_status tinyint 0 = закрыт

1 = открыт
cursor_rows decimal(10,0) Количество выбранных строк в результирующем наборе. Дополнительные сведения см. в разделе @@CURSOR_ROWS (Transact-SQL).
fetch_status smallint Состояние последней выборки данного курсора. Дополнительные сведения см. в разделе документации @@FETCH_STATUS (Transact-SQL).

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

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

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

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

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

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  

См. также

Курсоры
CURSOR_STATUS (Transact-SQL)
DECLARE CURSOR (Transact-SQL)
sp_cursor_list (Transact-SQL)
sp_describe_cursor_columns (Transact-SQL)
sp_describe_cursor_tables (Transact-SQL)