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是 int 类型的 OUTPUT 参数,没有默认值,且在调用时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_identitylocal

  • 如果游标具有GLOBAL关键字或默认为 GLOBAL,则@cursor_identityglobal @cursor_identity也可以是 ODBC 应用程序打开的 API 服务器游标的名称,然后通过调用命名SQLSetCursorName

  • 否则, @cursor_identity 是与打开的游标关联的游标变量的名称。

返回代码值

无。

返回的游标

sp_describe_cursor_columns 将其报表封装为 Transact-SQL cursor 输出参数。 这样,Transact-SQL 批处理、存储过程和触发器就可以一次处理一行输出。 这也意味着无法直接从数据库 API 函数调用该过程。 cursor输出参数必须绑定到程序变量,但数据库 API 不支持绑定cursor参数或变量。

下表显示了通过使用 sp_describe_cursor_columns. 返回的游标的格式。

列名称 数据类型 描述
column_name sysname 为结果集列分配的名称。 该列是在 NULL 未附带 AS 子句的情况下指定的列。

Nullable。
ordinal_position int 从结果集最左边一列算起的相对位置。 第一列处于位置 0
column_characteristics_flags int 指示存储在 OLE DB 中 DBCOLUMNFLAGS 的信息的位掩码。 可以是以下值的一个或组合:

1 = 书签
2 = 固定长度
4 = 可为 Null
8 = 行版本控制
16 = 可更新列(为无 FOR UPDATE 子句的游标投影列设置),如果存在此类列,则每个游标只能有一列。

当位值被合并时,将应用合并位值的特征。 例如,如果位值为 6,则列是固定长度 ()、可为 null 的24) 列。
column_size int 此列中的值最大的可能大小。
data_type_sql smallint 指示列的 SQL Server 数据类型的数字。
column_precision tinyint 根据 bPrecision OLE DB 中的值,列的最大精度。
column_scale tinyint 根据 OLE DB 中的值,数字十进制数据类型bScale的小数右侧的数字数。
order_position int 如果此列参与结果集排序,则表示它在排序键中相对于最左边的列的位置。
order_direction varchar(1) A = 列按顺序键排列,顺序为升序。
D = 列是顺序键,顺序为降序。

NULL = 列不参与排序。

Nullable。
hidden_column smallint 0 = 此列显示在选择列表中。

1 = 保留以供将来使用。
columnid int 基列的列 ID。 如果结果集列是从表达式生成的, columnid 则为 -1
objectid int 提供列的对象或基表的对象 ID。 如果结果集列是从表达式生成的, objectid 则为 -1
dbid int 包含提供列的基表的数据库 ID。 如果结果集列是从表达式生成的, dbid 则为 -1
dbname sysname 包含提供列的基表的数据库名称。 如果结果集列是从表达式生成的,则 dbname 为 NULL

Nullable。

注解

sp_describe_cursor_columns 描述服务器游标的结果集中列的属性,例如每个游标的名称和数据类型。 用于 sp_describe_cursor 描述服务器游标的全局属性。 用于 sp_describe_cursor_tables 游标引用的基表的报表。 若要获取在连接上可见的 Transact-SQL Server 游标的报表,请使用 sp_cursor_list

权限

要求 公共 角色具有成员身份。

示例

下面的示例将打开一个全局游标,并使用 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