sp_describe_cursor (Transact-SQL)

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

Значок ссылки на разделСоглашения о синтаксисе в 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
    Имя объявленной переменной для получения выходных данных курсора. Аргумент output_cursor_variable имеет тип cursor, не имеет значения по умолчанию и не должен быть связан ни с одним курсором при вызове процедуры sp_describe_cursor. Возвращенный курсор имеет свойства scrollable, dynamic и read-only.
  • [ @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).

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

Нет

Замечания

Процедура 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. Если в инструкции DECLARE CURSOR указано TYPE_WARNING, SQL Server посылает в приложение информационное сообщение о завершении преобразования. Процедура sp_describe_cursor может быть вызвана для определения типа полученного курсора.

Разрешения

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

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

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

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

Имя столбца Тип данных Описание

reference_name

sysname

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

cursor_name

sysname

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

cursor_scope

tinyint

1 = LOCAL

2 = GLOBAL

status

int

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

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

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

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

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

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

model

tinyint

1 = Не учитывать (статическая)

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

3 = Динамическая

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

concurrency

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 = операции над курсором не выполнялись.

1 = OPEN

2 = FETCH

3 = INSERT

4 = UPDATE

5 = DELETE

6 = CLOSE

7 = DEALLOCATE

cursor_handle

int

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

Примеры

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

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

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)

Другие ресурсы

Курсоры (ядро СУБД)

Справка и поддержка

Получение помощи по SQL Server 2005