Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 INFO
fetchtype- 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 REFRESH
fetchtype- bitvärde. Mer information finns i avsnittet Kommentarer.
Returnera kodvärden
När du anger bitvärdet INFO
visas 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
, RELATIVE
och 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_cursorfetch
PREV
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