sp_describe_cursor_tables (Transact-SQL)
报告服务器游标被引用对象或基表。
语法
sp_describe_cursor_tables
[ @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_tables 时,一定不能与任何游标相关联。返回的游标是可滚动的动态只读游标。
[ @cursor_source = ] { N'local'| N'global' | N'variable' }
指定是使用局部游标的名称、全局游标的名称还是游标变量的名称来指定要报告的游标。该参数的类型为 nvarchar(30)。
[ @cursor_identity = ] N'local_cursor_name'
由具有 LOCAL 关键字的 DECLARE CURSOR 语句,或默认为 LOCAL 的 DECLARE CURSOR 语句所创建的游标的名称。local_cursor_name 的数据类型为 nvarchar(128)。
[ @cursor_identity = ] N'global_cursor_name'
由具有 GLOBAL 关键字的 DECLARE CURSOR 语句,或默认为 GLOBAL 的 DECLARE CURSOR 语句所创建的游标的名称。global_cursor_name 也可以是由 ODBC 应用程序打开然后通过调用 SQLSetCursorName 进行命名的 API 服务器游标的名称。global_cursor_name 的数据类型为 nvarchar(128)。
[ @cursor_identity = ] N'input_cursor_variable'
与所打开游标相关联的游标变量的名称。input_cursor_variable 的数据类型为 nvarchar(128)。
返回代码值
无
备注
sp_describe_cursor_tables 说明服务器游标被引用基表。要查看游标所返回的结果集的属性说明,请使用 sp_describe_cursor_columns。要查看游标的全局特性(例如,其可滚动性和可更新性)的说明,请使用 sp_describe_cursor。若要获得在连接时可见的 Transact-SQL 服务器游标的报表,请使用 sp_cursor_list。
权限
要求具有 public 角色的成员身份。
返回的游标
sp_describe_cursor_tables 将其报表封装成 Transact-SQL cursor 输出参数。这样,Transact-SQL 批处理、存储过程和触发器即可按一次一行的方式处理输出。这还意味着不能直接从 API 函数调用此过程。cursor 输出参数必须绑定到程序变量,但是 API 不支持绑定 cursor 参数或变量。
下表显示 sp_describe_cursor_tables 所返回的游标的格式。
列名 | 数据类型 | 说明 |
---|---|---|
table owner |
sysname |
表所有者的用户 ID。 |
Table_name |
sysname |
对象或基表的名称。在 SQL Server 2005 中,服务器游标始终返回用户指定的对象,而不是基表。在 SQL Server 2000 中,如果视图或函数未使用 WITH VIEW_METADATA 创建,则服务器游标只返回基表。 |
Optimizer_hints |
smallint |
由下列一项或多项组成的位图: 1 = 行级锁定 (ROWLOCK) 4 = 页级锁定 (PAGELOCK) 8 = 表锁 (TABLOCK) 16 = 排他表锁 (TABLOCKX) 32 = 更新锁 (UPDLOCK) 64 = 无锁 (NOLOCK) 128 = 快速第一行选项 (FASTFIRST) 4096 = 与 DECLARE CURSOR 一起使用时用于读取可重复语义 (HOLDLOCK) 如果提供多个选项,系统将使用最有限制性的选项。但是,sp_describe_cursor_tables 将显示在查询中指定的标志。 |
lock_type |
smallint |
为该游标的每个基表显式或隐式地请求的滚动锁类型。该值可以是下列值之一: 0 = 无 1 = 共享 3 = 更新 |
server_name |
sysname, nullable |
驻留表的链接服务器的名称。如果使用 OPENQUERY 或 OPENROWSET,则为 NULL。 |
Objectid |
int |
表的对象 ID。如果使用 OPENQUERY 或 OPENROWSET,则为 0。 |
dbid |
int |
驻留表的数据库的 ID。如果使用 OPENQUERY 或 OPENROWSET,则为 0。 |
dbname |
sysname, nullable |
驻留表的数据库的名称。如果使用 OPENQUERY 或 OPENROWSET,则为 NULL。 |
示例
以下示例打开一个全局游标,并使用 sp_describe_cursor_tables
报告游标所引用的表。
USE AdventureWorks
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR KEYSET FOR
SELECT LastName
FROM Person.Contact
WHERE LastName LIKE 'S%'
OPEN abc
GO
-- Declare a cursor variable to hold the cursor output variable
-- from sp_describe_cursor_tables.
DECLARE @Report CURSOR
-- Execute sp_describe_cursor_tables into the cursor variable.
EXEC master.dbo.sp_describe_cursor_tables
@cursor_return = @Report OUTPUT,
@cursor_source = N'global', @cursor_identity = N'abc'
-- Fetch all the rows from the sp_describe_cursor_tables 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_tables.
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_cursor_list (Transact-SQL)
sp_describe_cursor (Transact-SQL)
sp_describe_cursor_columns (Transact-SQL)
系统存储过程 (Transact-SQL)