Dela via


sp_cursorfetch (Transact-SQL)

gäller för:SQL Server

Hämtar en buffert med en eller flera rader från databasen. Gruppen med rader i den här bufferten kallas markörens hämtningsbuffert. sp_cursorfetch anropas genom att ange ID = 7 i ett TDS-paket (Tabular Data Stream).

Transact-SQL syntaxkonventioner

Syntax

sp_cursorfetch cursor
    [ , fetchtype [ , rownum [ , nrows ] ] ]
[ ; ]

Argument

Viktig

Argument för utökade lagrade procedurer måste anges i den specifika ordning som beskrivs i avsnittet Syntax. Om parametrarna anges i fel ordning visas ett felmeddelande.

markören

Ett hantera värde som genereras av SQL Server och returneras av sp_cursoropen. markören är en obligatorisk parameter som anropar ett int indatavärde. Mer information finns i avsnittet Kommentarer.

fetchtype

Anger vilken markörbuffert som ska hämtas. fetchtype är en valfri parameter som kräver något av följande heltalsindatavärden.

Värde Namn Beskrivning
0x0001 FIRST Hämtar den första bufferten för nrows rader. Om nrows är lika med 0 placeras markören före resultatuppsättningen och inga rader returneras.
0x0002 NEXT Hämtar nästa buffert av nrows rader.
0x0004 PREV Hämtar den tidigare bufferten för nrows rader.

Obs! Om du använder PREV för en FORWARD_ONLY-markör returneras ett felmeddelande eftersom FORWARD_ONLY endast stöder rullning i en riktning.
0x0008 LAST Hämtar den sista bufferten för nrows rader. Om nrows är lika med 0 placeras markören efter resultatuppsättningen och inga rader returneras.

Obs! Om du använder LAST för en FORWARD_ONLY-markör returneras ett felmeddelande eftersom FORWARD_ONLY endast stöder rullning i en riktning.
0x10 ABSOLUTE Hämtar en buffert med nrows rader som börjar med radnummer rad.

Obs! Om du använder ABSOLUTE för antingen en DYNAMIC-markör eller en FORWARD_ONLY-markör returneras ett felmeddelande eftersom FORWARD_ONLY endast stöder rullning i en riktning.
0x20 RELATIVE Hämtar bufferten för nrows rader som börjar med raden som anges som radnummer värdet för rader från den första raden i det aktuella blocket. I det här fallet kan radnummer vara ett negativt tal.

Obs! Om du använder RELATIVE för en FORWARD_ONLY-markör returneras ett felmeddelande eftersom FORWARD_ONLY endast stöder rullning i en riktning.
0x80 REFRESH Fyller på bufferten från underliggande tabeller.
0x100 INFO Hämtar information om markören. Den här informationen returneras med hjälp av radnummer och nrows parametrar. När INFO anges radnummer och nrows därför bli utdataparametrar.
0x200 PREV_NOADJUST Används som PREV. Men om toppen av resultatuppsättningen påträffas i förtid kan resultatet variera.
0x400 SKIP_UPDT_CNCY Måste användas med något av de andra fetchtype--värden, förutom INFO.

Not

Det finns inget stöd för värdet 0x40.

Mer information finns i avsnittet Kommentarer.

radnummer

En valfri parameter som används för att ange radpositionen för ABSOLUTE och INFOfetchtype- värden genom att endast använda heltalsvärden för indata eller utdata, eller båda. radnummer fungerar som radförskjutning för fetchtype- bitvärde RELATIVE. radnummer ignoreras för alla andra värden. Mer information finns i avsnittet Kommentarer.

nrows

En valfri parameter som används för att ange antalet rader som ska hämtas. Om nrows inte har angetts är standardvärdet 20 rader. Om du vill ange positionen utan att returnera data anger du värdet 0. När nrows tillämpas på frågan fetchtypeINFO returneras det totala antalet rader i frågan.

nrows ignoreras av REFRESHfetchtype- bitvärde. Mer information finns i avsnittet Kommentarer.

Returnera kodvärden

När du anger bitvärdet INFOvisas de värden som kan returneras i följande tabeller.

Om inga rader returneras förblir buffertinnehållet som de var.

<radnummer> Ange till
Om den inte är öppen 0
Om den placeras före resultatuppsättningen 0
Om den placeras efter resultatuppsättningen -1
För markörer för KEYSET och STATIC Det absoluta radnumret för den aktuella positionen i resultatuppsättningen
För DYNAMIC markörer 1
För ABSOLUTE -1 returnerar den sista raden i en uppsättning.

-2 returnerar den näst sista raden i en uppsättning och så vidare.

Obs! Om mer än en rad begärs för hämtning i det här fallet returneras de två sista raderna i resultatuppsättningen.
<nrows> Ange till
Om den inte är öppen 0
För markörer för KEYSET och STATIC Vanligtvis den aktuella nyckeluppsättningens storlek.

-m om markören är i asynkron skapande med m rader som hittats till den här punkten.
För DYNAMIC markörer -1

Anmärkningar

Parametern markören

Före hämtningsåtgärder är standardpositionen för en markör före den första raden i resultatuppsättningen.

Parametern fetchtype

Förutom SKIP_UPD_CNCYär värdena för fetchtype ömsesidigt uteslutande.

När SKIP_UPDT_CNCY anges skrivs inte tidsstämpelkolumnvärdena till nyckeluppsättningstabellen när en rad hämtas eller uppdateras. Om nyckeluppsättningsraden uppdateras förblir värdena för tidsstämpelkolumnerna kvar som föregående värde. Om nyckeluppsättningsraden infogas är värdena för tidsstämpelkolumnerna odefinierade.

För KEYSET markörer innebär det att nyckeluppsättningstabellen har de värden som angetts under den senaste FETCH, om en har utförts. Annars är det värdena som anges under populationen.

För DYNAMIC markörer innebär det att om hoppa utförs med en uppdatering ger den samma resultat som KEYSET. För andra hämtningstyper trunkeras nyckeluppsättningstabellen. Det innebär att raderna infogas och värdena för tidsstämpelkolumnerna är odefinierade. När du kör sp_cursorfetch för DYNAMIC markörer bör du därför undvika att använda SKIP_UPDT_CNCY för andra åtgärder än REFRESH.

Om en hämtningsåtgärd misslyckas eftersom den begärda markören ligger utanför resultatuppsättningen anges markörens position strax efter den sista raden. Om en hämtningsåtgärd misslyckas eftersom den begärda markörens position är placerad före resultatuppsättningen anges markörens position före den första raden.

Parametern radnummer

När du använder radnummerfylls bufferten från och med den angivna raden.

Värdet fetchtypeABSOLUTE refererar till positionen för radnummer i hela resultatuppsättningen. Ett negativt tal med ABSOLUTE anger att åtgärden räknar rader från slutet av resultatuppsättningen.

Värdet fetchtypeRELATIVE refererar till positionen för radnummer i förhållande till markörens position i början av den aktuella bufferten. Ett negativt tal med RELATIVE anger att markören går bakåt från den aktuella markörens position.

Parametern nrows

Värdena för fetchtypeREFRESH och INFO ignorera den här parametern.

När du anger ett fetchtype- värde för FIRST som är ett nrow-värde värdet 0 placeras markören före resultatuppsättningen som inte är några rader i hämtningsbufferten.

När du anger ett fetchtype- värde för LAST som är ett nrow-värde värdet 0, placeras markören efter resultatuppsättningen som inte är några rader i den aktuella hämtningsbufferten.

För fetchtype värden för NEXT, PREV, ABSOLUTE, RELATIVEoch PREV_NOADJUSTär ett nrow värdet 0 inte giltigt.

RPC-överväganden

RPC-returstatusen anger om parametern för nyckeluppsättningens storlek är slutgiltig eller inte. om nyckeluppsättningen eller den tillfälliga tabellen fylls i asynkront.

RPC-statusparametern är inställd på något av de värden som visas i följande tabell.

Värde Beskrivning
0 Proceduren har körts.
0x0001 Proceduren misslyckades.
0x0002 En hämtning i negativ riktning gjorde att markörens position angavs till början av resultatuppsättningen, när hämtningen skulle ha varit logiskt före resultatet.
0x10 En snabbsnabb markören stängdes automatiskt.

Raderna returneras som en typisk resultatuppsättning: kolumnformat (0x2a), rader (0xd1), följt av DONE (0xfd). Metadatatoken skickas i samma format som anges för sp_cursoropen: 0x81, 0xa5 och 0xa4 för SQL Server-användare och så vidare. Radstatusindikatorerna skickas som dolda kolumner, ungefär som i BROWSE läge, i slutet av varje rad med kolumnnamnet rowstat och datatypen int. Den här rowstatkolumnen har ett av värdena som visas i följande tabell.

Värde Beskrivning
0x0001 FETCH_SUCCEEDED
0x0002 FETCH_MISSING

Eftersom TDS-protokollet inte ger något sätt att skicka kolumnen avslutande status utan att skicka föregående kolumner skickas dummydata för saknade rader. Null-fält är inställda på null och fält med fast längd anges till 0, blank eller standardvärdet för kolumnen efter behov.

Det DONE radantalet är alltid 0. Det DONE meddelandet innehåller det faktiska resultatuppsättningsradkontot och fel- eller informationsmeddelanden kan visas mellan eventuella TDS-meddelanden.

Om du vill begära att metadata om markörens urvalslista returneras i TDS-strömmen anger du flaggan RPC RETURN_METADATA input till 1.

Exempel

A. Använd PREV för att ändra en markörposition

Anta att en markör h2 skulle generera en resultatuppsättning med följande innehåll med en aktuell position som visas:

row 1 contents
row 2 contents
row 3 contents
row 4 contents  <-- current position
row 5 contents
row 6 contents

Därefter skulle en sp_cursorfetchPREV där nrows5 logiskt placera markören två rader före den första raden i resultatuppsättningen. I dessa fall justeras markören så att den börjar på den första raden och returnerar antalet begärda rader. Det innebär ofta att den returnerar rader som fanns i PRIOR hämtningsbuffert.

Not

Det här är det exakta fallet där RPC-statusparametern är inställd på 2.

B. Använd PREV_NOADJUST för att returnera färre rader än PREV

PREV_NOADJUST innehåller aldrig någon av raderna vid eller efter den aktuella markörpositionen i det block med rader som returneras. Om PREV returnerar rader efter den aktuella positionen returnerar PREV_NOADJUST färre rader än vad som begärdes i nrows. Med tanke på den aktuella positionen i exempel A tidigare, när PREV tillämpas, hämtar sp_cursorfetch (h2, 4, 1, 5) följande rader:

row1 contents
row2 contents
row3 contents
row4 contents
row5 contents

Men när PREV_NOADJUST tillämpas hämtar sp_cursorfetch (h2, 512, 6, 5) endast följande rader:

row1 contents
row2 contents
row3 contents