Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server-
Haalt een buffer op van een of meer rijen uit de database. De groep rijen in deze buffer wordt de cursor genoemd buffer ophalen.
sp_cursorfetch
wordt aangeroepen door ID = 7
op te geven in een TDS-pakket (tabellaire gegevensstroom).
Transact-SQL syntaxisconventies
Syntaxis
sp_cursorfetch cursor
[ , fetchtype [ , rownum [ , nrows ] ] ]
[ ; ]
Argumenten
Belangrijk
Argumenten voor uitgebreide opgeslagen procedures moeten worden ingevoerd in de specifieke volgorde, zoals beschreven in de sectie Syntaxis. Als de parameters niet in de volgorde zijn ingevoerd, treedt er een foutbericht op.
cursor
Een verwerkt waarde die wordt gegenereerd door SQL Server en geretourneerd door sp_cursoropen
.
cursor is een vereiste parameter die een invoerwaarde aanroept. Zie de sectie Opmerkingen voor meer informatie.
fetchtype
Hiermee geeft u op welke cursorbuffer moet worden opgehaald. fetchtype is een optionele parameter waarvoor een van de volgende invoerwaarden voor gehele getallen is vereist.
Waarde | Naam | Beschrijving |
---|---|---|
0x0001 |
FIRST |
Haalt de eerste buffer van nrows rijen op. Als nrows gelijk is aan 0, wordt de cursor geplaatst vóór de resultatenset en worden er geen rijen geretourneerd. |
0x0002 |
NEXT |
Haalt de volgende buffer van rijen op. |
0x0004 |
PREV |
Haalt de vorige buffer van nrows rijen op. Opmerking: Het gebruik van PREV voor een FORWARD_ONLY cursor retourneert een foutbericht omdat FORWARD_ONLY alleen het schuiven in één richting ondersteunt. |
0x0008 |
LAST |
Haalt de laatste buffer van nrows rijen op. Als nrows gelijk is aan 0, wordt de cursor geplaatst na de resultatenset en worden er geen rijen geretourneerd. Opmerking: Het gebruik van LAST voor een FORWARD_ONLY cursor retourneert een foutbericht omdat FORWARD_ONLY alleen het schuiven in één richting ondersteunt. |
0x10 |
ABSOLUTE |
Hiermee wordt een buffer van rijen rijen opgehaald die beginnen met het rijnummer rij. Opmerking: Het gebruik van ABSOLUTE voor een DYNAMIC cursor of een FORWARD_ONLY cursor retourneert een foutbericht omdat FORWARD_ONLY alleen het schuiven in één richting ondersteunt. |
0x20 |
RELATIVE |
Haalt de buffer van rijen rijen op die beginnen met de rij die is opgegeven als de rijnummer waarde van rijen uit de eerste rij in het huidige blok. In dit geval kan rijnummer een negatief getal zijn. Opmerking: Het gebruik van RELATIVE voor een FORWARD_ONLY cursor retourneert een foutbericht omdat FORWARD_ONLY alleen het schuiven in één richting ondersteunt. |
0x80 |
REFRESH |
Vult de buffer opnieuw op uit onderliggende tabellen. |
0x100 |
INFO |
Haalt informatie over de cursor op. Deze informatie wordt geretourneerd met behulp van de rijnummer en nrows parameters. Wanneer INFO is opgegeven, worden daarom rijnummer en nrows uitvoerparameters. |
0x200 |
PREV_NOADJUST |
Wordt gebruikt als PREV . Als de bovenkant van de resultatenset echter voortijdig wordt aangetroffen, kunnen de resultaten variëren. |
0x400 |
SKIP_UPDT_CNCY |
Moet worden gebruikt met een van de andere fetchtype waarden, met uitzondering van INFO . |
Notitie
Er is geen ondersteuning voor de waarde 0x40
.
Zie de sectie Opmerkingen voor meer informatie.
rijnummer
Een optionele parameter die wordt gebruikt om de rijpositie voor de ABSOLUTE
en INFO
fetchtype waarden op te geven met behulp van alleen gehele getallen voor invoer of uitvoer, of beide.
rijnummer fungeert als de rijverschuiving voor het fetchtype bitwaarde RELATIVE
.
rijnummer wordt genegeerd voor alle andere waarden. Zie de sectie Opmerkingen voor meer informatie.
Een optionele parameter die wordt gebruikt om het aantal rijen op te geven dat moet worden opgehaald. Als niet is opgegeven, is de standaardwaarde 20 rijen. Als u de positie wilt instellen zonder gegevens te retourneren, geeft u een waarde van 0
op. Wanneer wordt toegepast op de fetchtypeINFO
query, wordt het totale aantal rijen in die query geretourneerd.
wordt genegeerd door de REFRESH
fetchtype bitwaarde. Zie de sectie Opmerkingen voor meer informatie.
Codewaarden retourneren
Wanneer u de bitwaarde opgeeft INFO
, worden de waarden die kunnen worden geretourneerd, weergegeven in de volgende tabellen.
Als er geen rijen worden geretourneerd, blijft de bufferinhoud ongewijzigd.
<rijnummer> | Ingesteld op |
---|---|
Als dit niet is geopend | 0 |
Indien geplaatst vóór de resultatenset | 0 |
Indien geplaatst na de resultatenset | -1 |
Voor KEYSET en STATIC cursors |
Het absolute rijnummer van de huidige positie in de resultatenset |
Voor DYNAMIC cursors |
1 |
Voor ABSOLUTE |
-1 retourneert de laatste rij in een set. -2 retourneert de tweede tot laatste rij in een set, enzovoort. Opmerking: Als er meer dan één rij wordt aangevraagd voor het ophalen in dit geval, worden de laatste twee rijen van de resultatenset geretourneerd. |
<nrows> |
Ingesteld op |
---|---|
Als dit niet is geopend | 0 |
Voor KEYSET en STATIC cursors |
Normaal gesproken is de huidige sleutelsetgrootte.-m als de cursor asynchroon is gemaakt met m rijen die tot dit punt zijn gevonden. |
Voor DYNAMIC cursors |
-1 |
Opmerkingen
De cursor parameter
Voordat er ophaalbewerkingen worden uitgevoerd, bevindt de standaardpositie van een cursor zich vóór de eerste rij van de resultatenset.
De parameter fetchtype
Met uitzondering van SKIP_UPD_CNCY
sluiten de fetchtype waarden elkaar wederzijds uit.
Wanneer SKIP_UPDT_CNCY
is opgegeven, worden de tijdstempelkolomwaarden niet naar de sleutelsettabel geschreven wanneer een rij wordt opgehaald of vernieuwd. Als de sleutelsetrij wordt bijgewerkt, blijven de waarden van de tijdstempelkolommen behouden als de vorige waarde. Als de sleutelsetrij wordt ingevoegd, zijn de waarden voor de tijdstempelkolommen niet gedefinieerd.
Voor KEYSET
cursors betekent dit dat de keysettabel de waarden bevat die zijn ingesteld tijdens de laatste FETCH
, als er een is uitgevoerd. Zo niet, dan zijn dit de waarden die zijn ingesteld tijdens de populatie.
Voor DYNAMIC
cursors betekent dit dat als de skip wordt uitgevoerd met een vernieuwing, dezelfde resultaten produceert als KEYSET
. Voor elk ander type ophalen wordt de sleutelsettabel afgekapt. Dit betekent dat de rijen worden ingevoegd en dat de waarden voor de tijdstempelkolommen niet zijn gedefinieerd. Als u daarom sp_cursorfetch
uitvoert voor DYNAMIC
cursors, vermijdt u het gebruik van SKIP_UPDT_CNCY
voor andere bewerkingen dan REFRESH
.
Als een ophaalbewerking mislukt omdat de aangevraagde cursorpositie buiten de resultatenset valt, wordt de cursorpositie ingesteld vlak na de laatste rij. Als een ophaalbewerking mislukt omdat de aangevraagde cursorpositie vóór de resultatenset wordt geplaatst, wordt de cursorpositie ingesteld vóór de eerste rij.
De parameter rijnummer
Wanneer u rijnummergebruikt, wordt de buffer opgevuld vanaf de opgegeven rij.
De fetchtype waarde ABSOLUTE
verwijst naar de positie van rijnummer in de hele resultatenset. Een negatief getal met ABSOLUTE
geeft aan dat de bewerking rijen telt vanaf het einde van de resultatenset.
De fetchtype waarde RELATIVE
verwijst naar de positie van rijnummer ten opzichte van de positie van de cursor aan het begin van de huidige buffer. Een negatief getal met RELATIVE
geeft aan dat de cursor achteruit gaat vanaf de huidige cursorpositie.
De parameter
De fetchtype waarden REFRESH
en INFO
deze parameter negeren.
Wanneer u een fetchtype waarde opgeeft van FIRST
dat een nrow waarde 0 is, wordt de cursor geplaatst vóór de resultatenset die geen rijen in de ophaalbuffer bevat.
Wanneer u een fetchtype waarde opgeeft van LAST
die een nrow waarde 0 is, wordt de cursor geplaatst na de resultatenset die geen rijen in de huidige ophaalbuffer bevat.
Voor het fetchtype waarden van NEXT
, PREV
, ABSOLUTE
, RELATIVE
en PREV_NOADJUST
, is een waarde van 0
ongeldig.
RPC-overwegingen
De RPC-retourstatus geeft aan of de parameter voor de sleutelsetgrootte definitief is of niet; als de sleutelset of tijdelijke tabel asynchroon wordt gevuld.
De RPC-statusparameter is ingesteld op een van de waarden die worden weergegeven in de volgende tabel.
Waarde | Beschrijving |
---|---|
0 |
De procedure is uitgevoerd. |
0x0001 |
Procedure is mislukt. |
0x0002 |
Een ophaling in een negatieve richting zorgde ervoor dat de cursorpositie werd ingesteld op het begin van de resultatenset, wanneer het ophalen logisch vóór de resultaten zou zijn geweest. |
0x10 |
Er is automatisch een snelcursor gesloten. |
De rijen worden geretourneerd als een typische resultatenset: kolomopmaak (0x2a
), rijen (0xd1
), gevolgd door DONE
(0xfd
). Metagegevenstokens worden in dezelfde indeling verzonden als opgegeven voor sp_cursoropen
: 0x81
, 0xa5
en 0xa4
voor SQL Server-gebruikers, enzovoort. De rijstatusindicatoren worden verzonden als verborgen kolommen, vergelijkbaar met BROWSE
modus, aan het einde van elke rij met de kolomnaam rowstat en het gegevenstype int. Deze rijstat-kolom bevat een van de waarden die worden weergegeven in de volgende tabel.
Waarde | Beschrijving |
---|---|
0x0001 |
FETCH_SUCCEEDED |
0x0002 |
FETCH_MISSING |
Omdat het TDS-protocol geen manier biedt om de volgstatuskolom te verzenden zonder de vorige kolommen te verzenden, worden dummy-gegevens verzonden voor ontbrekende rijen. Null-velden zijn ingesteld op null en velden met een vaste lengte zijn ingesteld op 0
, leeg of de standaardwaarde voor die kolom, indien van toepassing.
Het DONE
aantal rijen is altijd 0
. Het DONE
bericht bevat het werkelijke aantal rijen in de resultatenset en fout- of informatieve berichten kunnen worden weergegeven tussen TDS-berichten.
Als u wilt aanvragen dat metagegevens over de selectielijst van de cursor worden geretourneerd in de TDS-stroom, stelt u de RPC-RETURN_METADATA
invoervlag in op 1
.
Voorbeelden
Een. PREV gebruiken om een cursorpositie te wijzigen
Stel dat een cursor h2 een resultatenset met de volgende inhoud met een huidige positie produceert, zoals wordt weergegeven:
row 1 contents
row 2 contents
row 3 contents
row 4 contents <-- current position
row 5 contents
row 6 contents
Vervolgens wordt een sp_cursorfetch
PREV
waarbij nrows is 5
de cursor twee rijen vóór de eerste rij van de resultatenset logisch plaatst. In deze gevallen wordt de cursor aangepast om te beginnen bij de eerste rij en het aantal aangevraagde rijen te retourneren. Dit betekent vaak dat er rijen worden geretourneerd die zich in de PRIOR
buffer voor ophalen bevinden.
Notitie
Dit is het exacte geval waarin de RPC-statusparameter is ingesteld op 2.
B. Gebruik PREV_NOADJUST om minder rijen te retourneren dan PREV
PREV_NOADJUST
bevat nooit een van de rijen op of na de huidige cursorpositie in het blok rijen dat wordt geretourneerd. In gevallen waarin PREV
rijen retourneert na de huidige positie, retourneert PREV_NOADJUST
minder rijen dan is aangevraagd in nrows. Gezien de huidige positie in voorbeeld A eerder, wanneer PREV
wordt toegepast, sp_cursorfetch (h2, 4, 1, 5)
de volgende rijen ophaalt:
row1 contents
row2 contents
row3 contents
row4 contents
row5 contents
Wanneer PREV_NOADJUST
wordt toegepast, worden echter alleen de volgende rijen opgehaald sp_cursorfetch (h2, 512, 6, 5)
:
row1 contents
row2 contents
row3 contents