sp_cursor_list (Transact-SQL)
适用范围:SQL Server
报告当前为连接打开的服务器游标的属性。
语法
sp_cursor_list
[ @cursor_return = ] cursor_return OUTPUT
, [ @cursor_scope = ] cursor_scope
[ ; ]
参数
[ @cursor_return = ] cursor_return OUTPUT
声明的游标变量的名称。 @cursor_return是 CURSOR 类型的 OUTPUT 参数。 游标是可滚动的动态只读游标。
[ @cursor_scope = ] cursor_scope
指定要报告的游标级别。 @cursor_scope 为 int,无默认值,可以是这些值之一。
值 | 说明 |
---|---|
1 |
报告所有本地游标。 |
2 |
报告所有全局游标。 |
3 |
报告本地游标和全局游标。 |
返回代码值
无。
返回的游标
sp_cursor_list
将报表作为 Transact-SQL 游标输出参数返回,而不是作为结果集返回。 这允许 Transact-SQL 批处理、存储过程和触发器一次处理一行输出。 这也意味着无法直接从数据库 API 函数调用该过程。 游标输出参数必须绑定到程序变量,但数据库 API 不支持绑定游标参数或变量。
这是游标返回的格式 sp_cursor_list
。 游标的格式与返回 sp_describe_cursor
的格式相同。
列名称 | 数据类型 | 描述 |
---|---|---|
reference_name |
sysname | 用于引用游标的名称。 如果对游标的引用是通过语句上 DECLARE CURSOR 给定的名称,则引用名称与游标名称相同。 如果通过变量引用游标,则引用名称为游标变量的名称。 |
cursor_name |
sysname | 语句中的游标 DECLARE CURSOR 的名称。 在 SQL Server 中,如果游标是通过将游标变量设置为游标创建的, cursor_name 则返回游标变量的名称。 在早期版本中,此输出列将返回系统生成的名称。 |
cursor_scope |
smallint | 1 = LOCAL 2 = GLOBAL |
status |
smallint | 与系统函数报告的 CURSOR_STATUS 相同值:1 = 游标名称或变量引用的游标处于打开状态。 如果游标不区分、静态或键集,则至少为一行。 如果游标是动态的,则结果集具有零行或多行。0 = 游标名称或变量引用的游标处于打开状态,但没有行。 动态游标从不返回此值。-1 = 游标名称或变量引用的游标已关闭。-2 = 仅适用于游标变量。 没有分配给变量的游标。 可能,参数 OUTPUT 将游标分配给变量,但存储过程在返回之前关闭了游标。-3 = 具有指定名称的游标或游标变量不存在,或者游标变量没有分配给它的游标。 |
model |
smallint | 1 = 不区分(或静态)2 = 键集3 = 动态4 = 快速转发 |
concurrency |
smallint | 1 = 只读2 = 滚动锁3 = 乐观 |
scrollable |
smallint | 0 = 仅向前1 = 可滚动 |
open_status |
smallint | 0 = 已关闭1 = 打开 |
cursor_rows |
int | 结果集中合格的行数。 有关详细信息,请参阅 @@CURSOR_ROWS。 |
fetch_status |
smallint | 此游标上次提取的状态。 有关详细信息,请参阅 @@FETCH_STATUS:0 = 提取成功。-1 = 提取失败或超出游标的边界。-2 = 缺少请求的行。-9 = 游标上没有提取。 |
column_count |
smallint | 游标结果集中的列数。 |
row_count |
smallint | 上次对游标的操作所影响的行数。 有关详细信息,请参阅 @@ROWCOUNT。 |
last_operation |
smallint | 上次对游标执行的操作:0 = 未对游标执行任何操作。1 = OPEN 2 = FETCH 3 = INSERT 4 = UPDATE 5 = DELETE 6 = CLOSE 7 = DEALLOCATE |
cursor_handle |
int | 在服务器作用域内标识游标的唯一值。 |
注解
sp_cursor_list
生成连接打开的当前服务器游标列表,并描述每个游标的全局属性,例如游标的可滚动性和可更新性。 列出的 sp_cursor_list
游标包括:
Transact-SQL Server 游标。
ODBC 应用程序打开的 API 服务器游标,然后调用
SQLSetCursorName
它来命名游标。
用于 sp_describe_cursor_columns
说明游标返回的结果集的属性。 用于 sp_describe_cursor_tables
游标引用的基表的报表。 sp_describe_cursor
报告与指定游标相同的信息 sp_cursor_list
,但只报告指定游标的信息。
权限
执行权限默认为 公共 角色。
示例
下面的示例将打开一个全局游标,并使用 sp_cursor_list
报告该游标的属性。
USE AdventureWorks2022;
GO
-- Declare and open a keyset-driven cursor.
DECLARE abc CURSOR KEYSET
FOR
SELECT LastName
FROM Person.Person
WHERE LastName LIKE 'S%';
OPEN abc;
-- Declare a cursor variable to hold the cursor output variable
-- from sp_cursor_list.
DECLARE @Report CURSOR;
-- Execute sp_cursor_list into the cursor variable.
EXEC master.dbo.sp_cursor_list
@cursor_return = @Report OUTPUT,
@cursor_scope = 2;
-- Fetch all the rows from the sp_cursor_list output cursor.
FETCH NEXT from @Report;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
FETCH NEXT from @Report;
END
-- Close and deallocate the cursor from sp_cursor_list.
CLOSE @Report;
DEALLOCATE @Report;
GO
-- Close and deallocate the original cursor.
CLOSE abc;
DEALLOCATE abc;
GO