Delen via


sp_cursorfetch (Transact-SQL)

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 INFOfetchtype 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 0op. Wanneer wordt toegepast op de fetchtypeINFO query, wordt het totale aantal rijen in die query geretourneerd.

wordt genegeerd door de REFRESHfetchtype 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_CNCYsluiten 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, RELATIVEen 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_cursorfetchPREV 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