CURSOR_STATUS (Transact-SQL)

一个标量函数,它允许存储过程的调用方确定该存储过程是否已为给定的参数返回了游标和结果集。

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

语法

CURSOR_STATUS 
          (
               { 'local' , 'cursor_name' } 
          | { 'global' , 'cursor_name' } 
          | { 'variable' , 'cursor_variable' } 
          )

参数

  • 'local'
    指定一个常量,该常量指示游标的源是一个本地游标名。

  • 'cursor_name'
    游标的名称。游标名必须符合有关标识符的规则。

  • 'global'
    指定一个常量,该常量指示游标的源是一个全局游标名。

  • 'variable'
    指定一个常量,该常量指示游标的源是一个本地变量。

  • 'cursor_variable'
    游标变量的名称。必须使用 cursor 数据类型定义游标变量。

返回类型

smallint

返回值

游标名

游标变量

1

游标的结果集至少有一行。

对于不区分的游标和键集游标,结果集至少有一行。

对于动态游标,结果集可以有零行、一行或多行。

分配给该变量的游标已打开。

对于不区分的游标和键集游标,结果集至少有一行。

对于动态游标,结果集可以有零行、一行或多行。

0

游标的结果集为空。*

分配给该变量的游标已经打开,然而结果集肯定为空。*

-1

游标被关闭。

分配给该变量的游标被关闭。

-2

不适用。

可以是:

先前调用的过程并没有将游标分配给 OUTPUT 变量。

先前调用的过程为 OUTPUT 变量分配了游标,然而在过程结束时,游标处于关闭状态。因此,游标被释放,并且没有返回调用过程。

没有将游标分配给已声明的游标变量。

-3

具有指定名称的游标不存在。

具有指定名称的游标变量并不存在,或者即使存在这样一个游标变量,但并没有给它分配游标。

* 动态游标从不返回此结果。

示例

以下示例使用 CURSOR_STATUS 函数显示游标在打开和关闭之前和之后的状态。

CREATE TABLE #TMP
(
   ii int
)
GO

INSERT INTO #TMP(ii) VALUES(1)
INSERT INTO #TMP(ii) VALUES(2)
INSERT INTO #TMP(ii) VALUES(3)

GO

--Create a cursor.
DECLARE cur CURSOR
FOR SELECT * FROM #TMP

--Display the status of the cursor before and after opening
--closing the cursor.

SELECT CURSOR_STATUS('global','cur') AS 'After declare'
OPEN cur
SELECT CURSOR_STATUS('global','cur') AS 'After Open'
CLOSE cur
SELECT CURSOR_STATUS('global','cur') AS 'After Close'

--Remove the cursor.
DEALLOCATE cur

--Drop the table.
DROP TABLE #TMP

下面是结果集:

声明后

---------------

-1

打开后

----------

1

关闭后

-----------

-1