sp_describe_cursor_columns (Transact-SQL)
适用范围:SQL Server
报告服务器游标结果集中的列属性。
语法
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_identity 。local
如果游标具有
GLOBAL
关键字或默认为GLOBAL
,则@cursor_identity 。global
@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 = 可为 Null8 = 行版本控制16 = 可更新列(为无 FOR UPDATE 子句的游标投影列设置),如果存在此类列,则每个游标只能有一列。当位值被合并时,将应用合并位值的特征。 例如,如果位值为 6 ,则列是固定长度 ()、可为 null 的2 (4 ) 列。 |
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