sp_describe_cursor_columns (Transact-SQL)

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

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

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

Синтаксис

sp_describe_cursor_columns
    [ @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_columns вызова. Возвращаемый курсор является прокручиваемым, динамическим и доступным только для чтения.

[ @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_columns инкапсулирует свой отчет как выходной параметр Transact-SQL cursor . Это позволяет пакетам Transact-SQL, хранимым процедурам и триггерам работать с выходными данными по одной строке одновременно. Это также означает, что процедура не может вызываться непосредственно из функций API базы данных. Выходной cursor параметр должен быть привязан к переменной программы, но API базы данных не поддерживают параметры привязки cursor или переменные.

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

Имя столбца Тип данных Description
column_name sysname Имя, назначенное столбцу результирующего набора. Столбец имеет значение NULL , если столбец был указан без сопутствующего AS предложения.

Допускает значение NULL.
ordinal_position int Позиция столбца относительно крайнего левого столбца в результирующем наборе. Первый столбец находится в позиции 0.
column_characteristics_flags int Битовая маска, указывающая сведения, хранящиеся в DBCOLUMNFLAGS OLE DB. Может быть одним или сочетанием следующих значений:

1 = Закладка
2 = фиксированная длина
4 = nullable
8 = управление версиями строк
16 = обновляемый столбец (устанавливается для проецируемых столбцов курсора, который не FOR UPDATE является предложением, и, если такой столбец существует, может быть только один на курсор).

При сочетании битовых значений применяются характеристики комбинируемых значений. Например, если битовое значение равно 6, столбец — это столбец фиксированной длины (2), столбец, допускающий значение NULL (4).
column_size int Предельно допустимый размер значения данного столбца.
data_type_sql smallint Число, указывающее тип данных SQL Server столбца.
column_precision tinyint Максимальная точность столбца по значению bPrecision в OLE DB.
column_scale tinyint Число цифр справа от десятичной запятой для числовых или десятичных типов данных по значению bScale в OLE DB.
order_position int Если столбец участвует в сортировке результирующего набора, позиция столбца в ключе сортировки относительно крайнего левого столбца.
order_direction varchar(1) A = столбец находится в ключе порядка, а порядок возрастает.
D = столбец находится в ключе порядка, а упорядочение происходит по убыванию.

NULL = столбец не участвует в упорядочении.

Допускает значение NULL.
hidden_column smallint 0 = этот столбец отображается в списке выбора.

1 = зарезервировано для дальнейшего использования.
columnid int Идентификатор базового столбца. Если столбец результирующих наборов был построен из выражения, columnid имеет значение -1.
objectid int Идентификатор объекта или базовой таблицы, служащих источником столбца. Если столбец результирующих наборов был построен из выражения, objectid имеет значение -1.
dbid int Идентификатор базы данных, в которой находится таблица этого столбца. Если столбец результирующих наборов был построен из выражения, dbid имеет значение -1.
dbname sysname Имя базы данных, содержащей базовую таблицу, служащую источником столбца. Если столбец результирующих наборов был создан из выражения, имя dbname NULL.

Допускает значение NULL.

Замечания

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

Разрешения

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

Примеры

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

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

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

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

-- Fetch all the rows from the sp_describe_cursor_columns 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_columns.
CLOSE @Report;
DEALLOCATE @Report;
GO
-- Close and deallocate the original cursor.
CLOSE abc;
DEALLOCATE abc;
GO