sp_describe_cursor_columns (Transact-SQL)

报告服务器游标结果集中的列属性。

主题链接图标Transact-SQL 语法约定

语法

sp_describe_cursor_columns 
   [ @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_variableOUTPUT

声明游标变量的名称,该变量接收游标输出。output_cursor_variable 的数据类型为 cursor,没有默认值,并且调用 sp_describe_cursor_columns 时,它不能与任何游标相关联。返回的游标是可滚动的动态只读游标。

[ @cursor_source = ] { N'local'| N'global' | N'variable' }

指定使用以下哪一名称来指定所报告的游标:本地游标、全局游标或游标变量的名称。该参数是 nvarchar(30)

[ @cursor_identity = ] N'local_cursor_name'

由具有 LOCAL 关键字或默认设置为 LOCAL 的 DECLARE CURSOR 语句创建的游标名称。local_cursor_name 的数据类型为 nvarchar(128)

[ @cursor_identity = ] N'global_cursor_name'

由具有 GLOBAL 关键字或默认设置为 GLOBAL 的 DECLARE CURSOR 语句创建的游标名称。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_columns 描述服务器游标结果集中的列属性,例如每个游标的名称和数据类型。使用 sp_describe_cursor 描述服务器游标的全局特性。使用 sp_describe_cursor_tables 报告游标被引用基表。若要获取连接中可见的 Transact-SQL 服务器游标的报表,请使用 sp_cursor_list

权限

要求具有 public 角色的成员身份。

返回的游标

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

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

列名 数据类型 说明

column_name

sysname(可为空值)

为结果集列分配的名称。如果指定列时不带 AS 子句,则该列为 NULL。

ordinal_position

int

从结果集最左边一列算起的相对位置。首列的位置为 0。

column_characteristics_flags

int

一个位掩码,它指示存储在 OLE DB 的 DBCOLUMNFLAGS 中的信息。可以是下列选项之一或组合:

1 = 书签

2 = 固定长度

4 = 可为空值

8 = 行版本控制

16 = 可更新列(为没有 FOR UPDATE 子句的游标的提取列设置,如果存在这样的列,则每个游标只能有一列)。

当位值被合并时,将应用合并位值的特征。例如,如果位值为 6,则列为一个固定长度 (2) 的可空 (4) 列。

column_size

int

此列中的值最大的可能大小。

data_type_sql

smallint

表示列的 SQL Server 数据类型的数字。

column_precision

tinyint

此参数根据 OLE DB 中的 bPrecision 值,指定列最大精度。

column_scale

tinyint

此参数根据 OLE DB 中的 bScale 值,指定 numericdecimal 数据类型小数点右边的位数。

order_position

int

如果此列参与结果集排序,则表示它在排序键中相对于最左边的列的位置。

order_direction

varchar(1)(可为空值)

A = 该列位于排序键中,按升序排列。

D = 该列位于排序键中,按降序排列。

NULL = 该列没有参与排序。

hidden_column

smallint

0 = 该列出现在选择列表中。

1 = 保留以供将来使用。

columnid

int

基列的列 ID。如果结果集列由表达式生成,则 columnid 为 -1。

objectid

int

提供列的对象或基表的对象 ID。如果结果集列由表达式生成,则 objectid 为 -1。

dbid

int

包含提供列的基表的数据库 ID。如果结果集列由表达式生成,则 dbid 为 -1。

dbname

sysname

(nullable)

包含提供列的基表的数据库名称。如果结果集列由表达式生成,则 dbname 为 NULL。

示例

以下示例打开一个全局游标,并使用 sp_describe_cursor_columns 报告游标所使用的列。

USE AdventureWorks;
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR KEYSET FOR
SELECT LastName
FROM Person.Contact
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

请参阅

参考

CURSOR_STATUS (Transact-SQL)
DECLARE CURSOR (Transact-SQL)
sp_describe_cursor (Transact-SQL)
sp_cursor_list (Transact-SQL)
sp_describe_cursor_tables (Transact-SQL)
系统存储过程 (Transact-SQL)

其他资源

游标(数据库引擎)

帮助和信息

获取 SQL Server 2005 帮助