sp_describe_cursor_tables (Transact-SQL)

报告由服务器游标引用的对象或基表。

主题链接图标 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 关键字或默认设置为 LOCAL 的 DECLARE CURSOR 语句所创建的游标的名称。 local_cursor_name 的数据类型为 nvarchar(128)。

  • [ @cursor\_identity= ] N'global_cursor_name'
    由具有 GLOBAL 关键字或默认设置为 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 将其报告作为 Transact-SQL cursor 输出参数封装。 这样,Transact-SQL 批处理、存储过程和触发器就可以逐行处理输出。 这还意味着不能直接从 API 函数调用此过程。 cursor 输出参数必须绑定到程序变量,但是 API 不支持绑定 cursor 参数或变量。

下表显示了 sp_describe_cursor_tables 返回的游标的格式。

列名

数据类型

说明

table owner

sysname

表所有者的用户 ID。

Table_name

sysname

对象或基表的名称。 在 SQL Server 中,服务器游标始终返回用户指定的对象,而不是基表。

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 说明由服务器游标引用的基表。 若要查看游标所返回的结果集的属性说明,请使用 sp_describe_cursor_columns。 若要查看游标的全局特性(例如,其可滚动性和可更新性)的说明,请使用 sp_describe_cursor。 若要获得在连接时可见的 Transact-SQL 服务器游标的报告,请使用 sp_cursor_list。

权限

要求具有 public 角色的成员身份。

示例

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

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

概念

游标