CURSOR_STATUS(Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

对于给定参数,CURSOR_STATUS 显示游标声明是否已返回游标或结果集。

Transact-SQL 语法约定

语法

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

参数

“local”

指定一个常量,该常量指示游标源是 本地游标

“global”

指定一个常量,该常量指示游标的源是 全局游标

“variable”

指定一个常量,该常量用于指示游标的源是一个本地变量。

  • cursor_variable

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

返回类型

smallint

返回值 游标名 游标变量
1 游标结果集至少有一行。

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

对于动态游标,结果集可以有零行、一行或多行。
分配给该变量的游标已打开。

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

对于动态游标,结果集可以有零行、一行或多行。
0 游标结果集为空。 1 分配给该变量的游标已经打开,然而结果集肯定为空。*
-1 游标被关闭。 分配给该变量的游标被关闭。
-2 不适用。 可能性如下:

以前调用的过程未向此 OUTPUT 变量分配游标。

以前分配的过程向此 OUTPUT 变量分配了游标,但在过程完成时游标处于关闭状态。 因此,游标被释放,并且没有返回调用过程。

未向已声明的游标变量分配任何游标。
-3 具有指定名称的游标不存在。 具有指定名称的游标变量不存在,或者如果存在,则尚未为其分配游标。

1 动态游标永远不会返回此结果。

示例

此示例使用 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
-- and 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;

结果集如下。

After declare
---------------
-1

After Open
----------
1

After Close
-----------
-1