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
.
Замечания
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