Dela via


CURSOR_STATUS (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

För en viss parameter CURSOR_STATUS visar om en markördeklaration har returnerat en markör och en resultatuppsättning.

Transact-SQL syntaxkonventioner

Syntax

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

Argumentpunkter

"lokal"

Anger en konstant som anger att markörkällan är en lokal markör.

"global"

Anger en konstant som anger att markörens källa är en global markör.

"variabel"

Anger en konstant som anger att markörens källa är en lokal variabel.

  • "cursor_variable"

    Namnet på markörvariabeln. En markörvariabel måste definieras med hjälp av markördatatypen .

Returtyper

smallint

Returvärde Markörnamn Markörvariabel
1 Markörens resultatuppsättning har minst en rad.

För okänsliga markörer och tangentuppsättningsmarkörer har resultatuppsättningen minst en rad.

För dynamiska markörer kan resultatuppsättningen ha noll, en eller flera rader.
Markören som allokerats till den här variabeln är öppen.

För okänsliga markörer och tangentuppsättningsmarkörer har resultatuppsättningen minst en rad.

För dynamiska markörer kan resultatuppsättningen ha noll, en eller flera rader.
0 Markörens resultatuppsättning är tom. 1 Markören som allokerats till den här variabeln är öppen, men resultatuppsättningen är definitivt tom.*
-1 Markören är stängd. Markören som allokerats till den här variabeln stängs.
-2 Ej tillämpbart. Har en av dessa möjligheter:

Den tidigare anropade proceduren tilldelar inte en markör till den här OUTPUT variabeln.

Den tidigare tilldelade proceduren tilldelade en markör till den här OUTPUT variabeln, men markören var i ett stängt tillstånd när proceduren slutfördes. Därför frigörs markören och returneras inte till anropsproceduren.

Ingen markör har tilldelats den deklarerade markörvariabeln.
-3 Det finns ingen markör med det angivna namnet. En markörvariabel med det angivna namnet finns inte, eller om en sådan finns allokeras ingen markör till den ännu.

1 Dynamiska markörer returnerar aldrig det här resultatet.

Exempel

I det här exemplet används CURSOR_STATUS funktionen för att visa status för en markör, efter deklarationen, när den har öppnats och när den har stängts.

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;

Här är resultatet.

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

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

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