sp_describe_cursor (Transact-SQL)

报告服务器游标的属性。

主题链接图标Transact-SQL 语法约定

语法

sp_describe_cursor [ @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 时,该参数不得与任何游标关联。返回的游标是可滚动的动态只读游标。

[ @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 的数据类型为 nvarchar(128)

global_cursor_name 也可以是 API 服务器游标的名称。该游标由 ODBC 应用程序打开,然后通过调用 SQLSetCursorName 命名。

[ @cursor_identity = ] N'input_cursor_variable' ]

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

返回代码值

备注

sp_describe_cursor 说明服务器游标的全局特性,如滚动和更新的能力。使用 sp_describe_cursor_columns 对游标返回的结果集的属性进行说明。使用 sp_describe_cursor_tables 报告游标被引用基表。若要获得连接时可见的 Transact-SQL 服务器游标的报表,可使用 sp_cursor_list

DECLARE CURSOR 语句可以请求一个游标类型,SQL Server 无法使用 DECLARE CURSOR 中包含的 SELECT 语句支持该游标类型。SQL Server 可以将该游标隐式转换为可用 SELECT 语句支持的类型。如果在 DECLARE CURSOR 语句中指定了 TYPE_WARNING,则 SQL Server 将向应用程序发送一个信息性消息,说明转换已完成。然后,可以调用 sp_describe_cursor 来确定已实现的游标的类型。

权限

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

返回的游标

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 语句的游标名称。在 SQL Server 2005 中,如果是通过为游标设置游标变量来创建游标的,则 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

decimal(10,0)

结果集中合格的行数。有关详细信息,请参阅 @@CURSOR_ROWS (Transact-SQL)

fetch_status

smallint

此游标上次提取的状态。有关详细信息,请参阅 @@FETCH_STATUS (Transact-SQL)

0 = 提取成功。

-1 = 提取失败或超出游标的界限。

-2 = 缺少所请求的行。

-9 = 尚未对游标进行提取。

column_count

smallint

游标结果集中的列数。

row_count

decimal(10,0)

受游标的上次操作影响的行数。有关详细信息,请参阅 @@ROWCOUNT (Transact-SQL)

last_operation

tinyint

上次对游标执行的操作:

0 = 没有对游标执行操作。

1 = OPEN

2 = FETCH

3 = INSERT

4 = UPDATE

5 = DELETE

6 = CLOSE

7 = DEALLOCATE

cursor_handle

int

服务器范围内的游标唯一值。

示例

以下示例将打开一个全局游标,并使用 sp_describe_cursor 报告该游标的属性。

USE AdventureWorks;
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR STATIC FOR
SELECT LastName
FROM Person.Contact

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

请参阅

参考

CURSOR_STATUS (Transact-SQL)
DECLARE CURSOR (Transact-SQL)
sp_cursor_list (Transact-SQL)
sp_describe_cursor_columns (Transact-SQL)
sp_describe_cursor_tables (Transact-SQL)

其他资源

游标(数据库引擎)

帮助和信息

获取 SQL Server 2005 帮助