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 PREV folgt 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 INFO
angeben, 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_CNCY
Abgesehen 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 FETCH
festgelegt 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
, RELATIVE
und 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