sp_cursorfetch (Transact-SQL)

Gilt für: SQL Server

Ruft einen Puffer mit mindestens einer Zeile aus der Datenbank ab. Die Gruppe der Zeilen in diesem Puffer wird als Abrufpuffer des Cursors bezeichnet. sp_cursorfetch wird aufgerufen, indem in einem TDS-Paket (Tabular Data Stream) angegeben ID = 7 wird.

Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

Cursor

Ein handle-Wert, der von SQL Server generiert und von sp_cursoropen. Cursor ist ein erforderlicher Parameter, der einen Int-Eingabewert aufruft. Weitere Informationen finden Sie im Abschnitt Hinweise.

Fetchtype

Gibt an, welcher Cursorpuffer abgerufen werden soll. fetchtype ist ein optionaler Parameter, der einen der folgenden ganzzahligen Eingabewerte erfordert.

Wert Name Beschreibung
0x0001 FIRST Ruft den ersten Puffer der Zeilen nrows ab. Wenn nrows gleich 0 ist, wird der Cursor vor dem Resultset positioniert, und es werden keine Zeilen zurückgegeben.
0x0002 NEXT Ruft den nächsten Puffer von Zeilen nrows ab.
0x0004 PREV Ruft den vorherigen Puffer der Zeilen nrows ab.

Hinweis: Die Verwendung PREV für einen FORWARD_ONLY Cursor gibt eine Fehlermeldung zurück, da FORWARD_ONLY nur das Scrollen in eine Richtung unterstützt wird.
0x0008 LAST Ruft den letzten Puffer der Zeilen nrows ab. Wenn nrows gleich 0 ist, wird der Cursor nach dem Resultset positioniert, und es werden keine Zeilen zurückgegeben.

Hinweis: Die Verwendung LAST für einen FORWARD_ONLY Cursor gibt eine Fehlermeldung zurück, da FORWARD_ONLY nur das Scrollen in eine Richtung unterstützt wird.
0x10 ABSOLUTE Ruft einen Puffer von Zeilen ab, die mit der Zeilenumzeile beginnen.

Hinweis: Die Verwendung ABSOLUTE für einen DYNAMIC Cursor oder cursor FORWARD_ONLY gibt eine Fehlermeldung zurück, da FORWARD_ONLY nur der Bildlauf in eine Richtung unterstützt wird.
0x20 RELATIVE Ruft den Puffer der Zeilen nrows ab, beginnend mit der Zeile, die als Zeilenumwert der Zeilen aus der ersten Zeile im aktuellen Block angegeben ist. In diesem Fall kann rownum eine negative Zahl sein.

Hinweis: Die Verwendung RELATIVE für einen FORWARD_ONLY Cursor gibt eine Fehlermeldung zurück, da FORWARD_ONLY nur das Scrollen in eine Richtung unterstützt wird.
0x80 REFRESH Füllt den Puffer anhand zugrunde liegender Tabellen auf.
0x100 INFO Ruft Informationen zum Cursor ab. Diese Informationen werden mithilfe der Parameter "rownum " und "nrows " zurückgegeben. INFO Wenn sie angegeben wird, werden zeilenum und nrows zu Ausgabeparametern.
0x200 PREV_NOADJUST Wird wie PREVfolgt verwendet. Wenn der Anfang des Resultsets vorzeitig gefunden wird, können die Ergebnisse jedoch variieren.
0x400 SKIP_UPDT_CNCY Muss mit einem der anderen Fetchtype-Werte verwendet werden, mit Ausnahme von INFO.

Hinweis

Es gibt keine Unterstützung für den Wert 0x40.

Weitere Informationen finden Sie im Abschnitt Hinweise.

rownum

Ein optionaler Parameter, der verwendet wird, um die Zeilenposition für die ABSOLUTE Werte und INFO die Abrufwerte anzugeben, indem nur ganzzahlige Werte für Eingabe oder Ausgabe verwendet werden, oder beides. rownum dient als Zeilenoffset für den Fetchtype-BitwertRELATIVE. rownum wird für alle anderen Werte ignoriert. Weitere Informationen finden Sie im Abschnitt Hinweise.

Nr.

Ein optionaler Parameter, der zum Angeben der Anzahl der abzurufenden Zeilen verwendet wird. Wenn keine Nrows angegeben sind, beträgt der Standardwert 20 Zeilen. Um die Position festzulegen, ohne Daten zurückzugeben, geben Sie einen Wert von 0. Wenn nrows auf die Fetchtype-Abfrage INFO angewendet wird, wird die Gesamtanzahl der Zeilen in dieser Abfrage zurückgegeben.

Nrows werden vom REFRESH Fetchtype-Bitwert ignoriert. Weitere Informationen finden Sie im Abschnitt Hinweise.

Rückgabecodewerte

Wenn Sie den Bitwert INFOangeben, werden die möglicherweise zurückgegebenen Werte in den folgenden Tabellen angezeigt.

Wenn keine Zeilen zurückgegeben werden, bleiben die Pufferinhalte wie vorhanden.

<rownum> Festlegen auf
Falls nicht geöffnet 0
Falls vor dem Resultset positioniert 0
Falls nach dem Resultset positioniert -1
Für KEYSET und STATIC Cursor Die absolute Zeilennummer der aktuellen Position im Resultset
Für DYNAMIC Cursor 1
Für ABSOLUTE -1 gibt die letzte Zeile in einem Satz zurück.

-2 gibt die vorletzte Zeile in einem Satz zurück usw.

Hinweis: Wenn mehr als eine Zeile zum Abrufen in diesem Fall angefordert wird, werden die letzten beiden Zeilen des Resultsets zurückgegeben.
<nrows> Festlegen auf
Falls nicht geöffnet 0
Für KEYSET und STATIC Cursor Normalerweise die aktuelle Keysetgröße.

-m wenn sich der Cursor in der asynchronen Erstellung mit m-Zeilen befindet, die an diesem Punkt gefunden wurden.
Für DYNAMIC Cursor -1

Hinweise

Der Cursorparameter

Vor Abrufvorgängen befindet sich die Standardposition eines Cursors vor der ersten Zeile des Resultsets.

Der Fetchtype-Parameter

SKIP_UPD_CNCYAbgesehen davon schließen sich die Abruftypwerte gegenseitig aus.

Wenn SKIP_UPDT_CNCY angegeben, werden die Zeitstempelspaltenwerte nicht in die Keysettabelle geschrieben, wenn eine Zeile abgerufen oder aktualisiert wird. Wenn die Keysetzeile aktualisiert wird, wird für die Werte der timestamp-Spalten der vorherige Wert beibehalten. Wenn die Keysetzeile eingefügt wird, wird die Definition der Werte für die timestamp-Spalten aufgehoben.

Bei KEYSET Cursorn bedeutet dies, dass die Keyset-Tabelle die Werte enthält, die während des letzten Nichtskip FETCHfestgelegt wurden, wenn eine ausgeführt wurde. Wenn nicht, sind die Werte, die während der Population festgelegt werden.

Bei DYNAMIC Cursorn bedeutet dies, dass wenn der Überspringen mit einer Aktualisierung ausgeführt wird, die gleichen Ergebnisse wie KEYSET. Bei jedem anderen Fetchtyp wird die Keysettabelle abgeschnitten. Dies bedeutet, dass die Zeilen eingefügt werden und die Werte für die Zeitstempelspalten nicht definiert sind. Vermeiden Sie daher bei der Ausführung sp_cursorfetch für DYNAMIC Cursor die Verwendung SKIP_UPDT_CNCY für einen anderen Vorgang als REFRESH.

Wenn ein Abrufvorgang fehlerhaft ist, weil die angeforderte Cursorposition außerhalb des Resultsets liegt, wird die Cursorposition unmittelbar nach der letzten Zeile festgelegt. Wenn ein Abrufvorgang fehlerhaft ist, weil die angeforderte Cursorposition vor dem Resultset liegt, wird die Cursorposition vor der ersten Zeile festgelegt.

Der Rownum-Parameter

Wenn Sie rownum verwenden, wird der Puffer beginnend mit der angegebenen Zeile gefüllt.

Der Fetchtype-Wert ABSOLUTE bezieht sich auf die Position von Rownum innerhalb des gesamten Resultsets. Eine negative Zahl mit ABSOLUTE Specifies that the operation counts rows from the end of the result set.

Der Fetchtype-Wert RELATIVE bezieht sich auf die Position von Rownum im Verhältnis zur Position des Cursors am Anfang des aktuellen Puffers. Eine negative Zahl mit RELATIVE Specifies that the cursor go backward from the current cursor position.

Der Parameter nrows

Die Fetchtype-Werte REFRESH und INFO ignorieren diesen Parameter.

Wenn Sie einen Abruftypwert von FIRST 0 angeben, wird der Cursor vor dem Resultset positioniert, der keine Zeilen im Abrufpuffer enthält.

Wenn Sie einen Abruftypwert von LAST 0 angeben, wird der Cursor nach dem Resultset positioniert, das keine Zeilen im aktuellen Abrufpuffer enthält.

Für die Fetchtype-Werte von NEXT, PREV, ABSOLUTE, RELATIVEund PREV_NOADJUST, ist ein Nrow-Wert ungültig 0 .

RPC-Überlegungen

Der RPC-Rückgabestatus gibt an, ob der Parameter für die Keysetgröße endgültig ist oder nicht. das heißt, wenn die Keyset- oder temporäre Tabelle asynchron aufgefüllt wird.

Der RPC-Statusparameter wird auf einen der Werte in der folgenden Tabelle festgelegt.

Wert Beschreibung
0 Die Prozedur wurde erfolgreich ausgeführt.
0x0001 Fehler bei der Prozedur.
0x0002 Ein Abruf in einer negativen Richtung hätte die Cursorposition auf den Anfang des Resultsets festgelegt, wenn der Abruf logisch vor den Ergebnissen erfolgt wäre.
0x10 Ein Schneller Vorwärtscursor wurde automatisch geschlossen.

Die Zeilen werden als typisches Resultset zurückgegeben: Spaltenformat (0x2a), Zeilen (0xd1), gefolgt von DONE (0xfd). Metadatentoken werden im gleichen Format wie für sp_cursoropen: 0x81, 0xa5 und 0xa4 für SQL Server-Benutzer usw. gesendet. Die Zeilenstatusanzeigen werden als ausgeblendete Spalten gesendet, ähnlich dem BROWSE Modus, am Ende jeder Zeile mit dem Spaltennamen rowstat und dem Datentyp int. Diese Rowstat-Spalte weist einen der Werte auf, die in der folgenden Tabelle angezeigt werden.

Wert Beschreibung
0x0001 FETCH_SUCCEEDED
0x0002 FETCH_MISSING

Da das TDS-Protokoll keine Möglichkeit zum Senden der nachgestellten Statusspalte bietet, ohne die vorherigen Spalten zu senden, werden Dummydaten für fehlende Zeilen gesendet. Nullable fields are set to null, and fixed length fields are set to 0, blank, or the default for that column, as appropriate.

Der DONE Zeilenzähler ist immer 0. Die DONE Nachricht enthält den tatsächlichen Ergebnissatzzeilenanzahl, und Fehler- oder Informationsmeldungen können zwischen TDS-Nachrichten angezeigt werden.

Um anzufordern, dass Metadaten zur Auswahlliste des Cursors im TDS-Datenstrom zurückgegeben werden, legen Sie das RPC-Eingabekennzeichnung RETURN_METADATA auf 1.

Beispiele

A. Verwenden von PREV zum Ändern einer Cursorposition

Angenommen, der Cursor h2 würde ein Resultset erzeugen, das über den folgenden Inhalt mit der angegebenen aktuellen Position verfügt:

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

Als Nächstes positioniert eine sp_cursorfetch PREV Position, an der nrows 5 logisch den Cursor zwei Zeilen vor der ersten Zeile des Resultsets positioniert. In diesen Fällen wird der Cursor so eingerichtet, dass er an der ersten Zeile beginnt und die angeforderte Zeilenanzahl zurückgibt. Dies bedeutet häufig, dass Zeilen zurückgegeben werden, die sich PRIOR im Abrufpuffer befinden.

Hinweis

Genau in diesem Fall wird der RPC-Statusparameter auf 2 festgelegt.

B. Verwenden von PREV_NOADJUST, um weniger Zeilen als PREV zurückzugeben

PREV_NOADJUST Enthält niemals eine der Zeilen an oder nach der aktuellen Cursorposition im zurückgegebenen Zeilenblock. In Fällen, in denen PREV Zeilen nach der aktuellen Position zurückgegeben werden, PREV_NOADJUST werden weniger Zeilen als in Nrows angefordert. Wenn die aktuelle Position in Beispiel A zuvor PREV angewendet wird, sp_cursorfetch (h2, 4, 1, 5) werden die folgenden Zeilen abgerufen:

row1 contents
row2 contents
row3 contents
row4 contents
row5 contents

Wenn PREV_NOADJUST jedoch angewendet wird, sp_cursorfetch (h2, 512, 6, 5) werden nur die folgenden Zeilen abgerufen:

row1 contents
row2 contents
row3 contents