sp_describe_cursor (Transact-SQL)
适用于:SQL Server
报告服务器游标的属性。
语法
sp_describe_cursor
[ @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
不得与任何游标相关联。 返回的游标是可滚动的动态只读游标。
[ @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
在 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 的名称。 如果游标是通过将游标变量设置为游标创建的, cursor_name 则返回游标变量的名称。 在早期版本的 SQL Server 中,此输出列返回系统生成的名称。 |
cursor_scope |
tinyint | 1 = LOCAL 2 = GLOBAL |
status |
int | 与系统函数报告的 CURSOR_STATUS 相同值:1 = 游标名称或变量引用的游标处于打开状态。 如果游标不区分、静态或键集,则至少为一行。 如果游标是动态的,则结果集具有零行或多行。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 |
十进制(10,0) | 结果集中符合条件的行数。 有关详细信息,请参阅 @@CURSOR_ROWS。 |
fetch_status |
smallint | 此游标上最后一次提取的状态。 有关详细信息,请参阅 @@FETCH_STATUS。0 = 提取成功。-1 = 提取失败或超出游标的边界。-2 = 缺少请求的行。-9 = 游标上未发生提取。 |
column_count |
smallint | 游标结果集中的列数。 |
row_count |
十进制(10,0) | 受游标的上次操作影响的行数。 有关详细信息,请参阅 @@ROWCOUNT。 |
last_operation |
tinyint | 对游标执行的最后一个操作:0 = 未对游标执行任何操作。1 = OPEN 2 = FETCH 3 = INSERT 4 = UPDATE 5 = DELETE 6 = CLOSE 7 = DEALLOCATE |
cursor_handle |
int | 服务器范围内的游标唯一值。 |
注解
sp_describe_cursor
描述全局到服务器游标的属性,例如滚动和更新的功能。 用于 sp_describe_cursor_columns
说明游标返回的结果集的属性。 用于 sp_describe_cursor_tables
游标引用的基表的报表。 若要获取在连接上可见的 Transact-SQL Server 游标的报表,请使用 sp_cursor_list
。
语句 DECLARE CURSOR
可能会请求 SQL Server 无法使用 SELECT
包含在其中的 DECLARE CURSOR
语句的游标类型。 SQL Server 隐式将游标转换为可以使用该语句支持 SELECT
的类型。 如果在 TYPE_WARNING
语句中 DECLARE CURSOR
指定,SQL Server 会向应用程序发送一条信息性消息,指出转换已完成。 sp_describe_cursor
然后,可以调用以确定已实现的游标的类型。
权限
要求 公共 角色具有成员身份。
示例
下面的示例将打开一个全局游标,并使用 sp_describe_cursor
报告该游标的属性。
USE AdventureWorks2022;
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR STATIC FOR
SELECT LastName
FROM Person.Person;
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