sys.sp_describe_cursor (Transact-SQL)

Gäller för:SQL Server

Rapporterar attributen för en servermarkör.

Transact-SQL syntaxkonventioner

Syntax

sys.sp_describe_cursor
    [ @cursor_return = ] cursor_return OUTPUT
    , [ @cursor_source = ] { N'local' | N'global' | N'*cursor_source*' }
    , [ @cursor_identity = ] N'cursor_identity'
[ ; ]

Arguments

[ @cursor_return = ] cursor_return UTGÅNG

Namnet på en deklarerad markörvariabel för att ta emot markörens utdata. @cursor_return är en OUTPUT parameter av typen int, utan standard, och får inte vara kopplad till några markörer när sp_describe_cursor den anropas. Markören som returneras är en rullbar, dynamisk, skrivskyddad markör.

[ @cursor_source = ] { N'local' | N'global' | N'cursor_source' }

Specificerar om markören som rapporteras anges genom att använda namnet på en lokal markör, en global markör eller en markörvariabel. @cursor_source är nvarchar(30), utan standard.

[ @cursor_identity = ] N'cursor_identity'

Namnet på en markör skapas av ett DECLARE CURSOR uttalande. @cursor_identity är nvarchar(128), utan standard.

  • Om markören har LOCAL nyckelordet, eller är standardinställd på LOCAL, är @cursor_identity .local

  • Om markören har GLOBAL nyckelordet, eller är standardinställd på GLOBAL, är @cursor_identity .global @cursor_identity kan också vara namnet på en API-serverpekare som öppnas av en ODBC-applikation och sedan namnges genom att anropa SQLSetCursorName.

  • Annars är @cursor_identity namnet på en markörvariabel kopplad till en öppen markör.

Returnera kodvärden

None.

Markörer återvände

sp_describe_cursor kapslar in sin resultatmängd i en Transact-SQL cursor utgångsparameter. Detta möjliggör att Transact-SQL batcher, lagrade procedurer och triggers kan arbeta med utdata en rad i taget. Detta innebär också att proceduren inte kan anropas direkt från databas-API-funktioner. Utdataparametern cursor måste vara bunden till en programvariabel, men databas-API:erna stöder inte bindningsparametrar cursor eller variabler.

Följande tabell visar formatet på markören som returneras genom att använda sp_describe_cursor. Formatet på markören är detsamma som formatet som returneras genom att använda sp_cursor_list.

Kolumnnamn Datatyp Description
reference_name sysname Namnet används för att syfta på markören. Om referensen till markören gick via namnet som anges i ett DECLARE CURSOR uttalande, är referensnamnet samma som markörens namn. Om referensen till markören gick via en variabel, är referensnamnet namnet på variabeln.
cursor_name sysname Namnet på markören från ett DECLARE CURSOR uttalande. Om markören skapades genom att sätta en markörvariabel till en markör cursor_name , returnerar namnet på markörvariabeln. I tidigare versioner av SQL Server returnerar denna utdatakolumn ett systemgenererat namn.
cursor_scope tinyint 1 = LOCAL
2 = GLOBAL
status int Samma värden som rapporteras CURSOR_STATUS av systemfunktionen:

1 = Markören som refereras till av markörnamnet eller variabeln är öppen. Om markören är okänslig, statisk eller med tangenter är det minst en rad. Om markören är dynamisk har resultatmängden noll eller fler rader.
0 = Markören som refereras till med markörens namn eller variabel är öppen men har inga rader. Dynamiska markörer returnerar aldrig detta värde.
-1 = Markören som refereras till av markörnamnet eller variabeln är stängd.
-2 = Gäller endast för markörvariabler. Det finns ingen markör tilldelad variabeln. Möjligen OUTPUT en parameter tilldelade en markör till variabeln, men den lagrade proceduren stängde markören innan den återvände.
-3 = En markör eller markörvariabel med det angivna namnet existerar inte, eller så har markörvariabeln ingen markör tilldelad.
model tinyint 1 = Okänslig (eller statisk)
2 = Tangentuppsättning
3 = Dynamisk
4 = Spola fram
concurrency tinyint 1 = Skrivskyddat
2 = Scrolllås
3 = Optimistisk
scrollable tinyint 0 = Endast framåt
1 = Rullbart
open_status tinyint 0 = Stängd
1 = Öppet
cursor_rows decimal(10,0) Antal kvalificerade rader i resultatuppsättningen. För mer information, se @@CURSOR_ROWS.
fetch_status smallint Status för den sista hämtningen på denna markör. För mer information, se @@FETCH_STATUS.

0 = Hämtan lyckades.
-1 = Hämtningen misslyckades eller ligger utanför markörens gränser.
-2 = Den begärda raden saknas.
-9 = Ingen hämtning skedde på markören.
column_count smallint Antal kolumner i markörresultatuppsättningen.
row_count decimal(10,0) Antalet rader påverkas av den senaste operationen på markören. För mer information, se @@ROWCOUNT.
last_operation tinyint Sista operationen utförd på markören:

0 = Inga operationer utfördes på markören.
1 = OPEN
2 = FETCH
3 = INSERT
4 = UPDATE
5 = DELETE
6 = CLOSE
7 = DEALLOCATE
cursor_handle int Ett unikt värde för markören inom serverns omfattning.

Remarks

sp_describe_cursor beskriver attributen som är globala för en servermarkör, såsom möjligheten att scrolla och uppdatera. Använd sp_describe_cursor_columns för en beskrivning av attributen i resultatuppsättningen som returneras av markören. Använd sp_describe_cursor_tables för en rapport över bastabellerna som pekaren refererar till. För att få en rapport över de Transact-SQL servermarkörerna som är synliga på anslutningen, använd sp_cursor_list.

En DECLARE CURSOR sats kan begära en markörtyp som SQL Server inte kan stödja med satsen SELECT som finns i DECLARE CURSOR. SQL Server konverterar implicit markören till en typ som den kan stödja med satsenSELECT. Om anges TYPE_WARNING i satsen DECLARE CURSOR skickar SQL Server applikationen ett informationsmeddelande om att en konvertering har slutförts. sp_describe_cursor kan sedan anropas för att avgöra vilken typ av markör som har implementerats.

Permissions

Kräver medlemskap i offentlig roll.

Examples

Följande exempel öppnar en global markör och används sp_describe_cursor för att rapportera om markörens attribut.

USE AdventureWorks2022;
GO

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

OPEN abc;

-- Declare a cursor variable to hold the cursor output variable
-- from sp_describe_cursor.
DECLARE @Report AS CURSOR;

-- Execute sp_describe_cursor into the cursor variable.
EXECUTE 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