Transact-SQL 参考

sp_describe_cursor_tables

报告服务器游标所引用的基表。

语法

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_variable OUTPUT

声明游标变量的名称,该变量接收游标输出。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 关键字或默认设置为 LOCAL 的 DECLARE CURSOR 语句创建的游标的名称。local_cursor_name 的数据类型为 nvarchar(128)

[@cursor_identity =] N'global_cursor_name'

由具有 GLOBAL 关键字或默认设置为 GLOBAL 的 DECLARE CURSOR 语句创建的游标的名称。也可以是由 ODBC 应用程序打开然后通过调用 SQLSetCursorName 对游标命名的 API 服务器游标的名称。global_cursor_name 的数据类型为 nvarchar(128)

[@cursor_identity =] N'input_cursor_variable'

与开放游标相关联的游标变量的名称。input_cursor_variable 的数据类型为 nvarchar(128)

返回代码值

返回的游标

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

下面是 sp_describe_cursor_tables 返回的游标格式。

列名 数据类型 描述
tableowner sysname 表所有者的用户 ID。
Table_name sysname 基表的名称。
Optimizer_hints smallint 位图由以下一个或多个选项组成:

1 = 行级锁定 (ROWLOCK)
4 = 页级锁定 (PAGELOCK)
8 = 表锁定 (TABLOCK)
16 = 排它表锁 (TABLOCKX)
32 = 更新锁 (UPDLOCK)
64 = 不锁定 (NOLOCK)
128 = 快速首行选项 (FASTFIRST)
4096 = 使用声明游标时可重复读取语义 (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 描述服务器游标所引用的基表。使用 sp_describe_cursor_columns 描述由游标返回的结果集的特性。使用 sp_describe_cursor 描述游标的全局特性,例如可滚动性和可更新性。使用 sp_cursor_list 可获得连接时可视的 Transact-SQL 服务器游标的报告。

权限

执行权限默认授予 public 角色。

示例

下面的示例打开一个全局游标,并使用 sp_describe_cursor_tables 报告游标所引用的表。

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

DECLARE CURSOR

sp_cursor_list

sp_describe_cursor

sp_describe_cursor_columns

系统存储过程