Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Fordert positionierte Updates an. Mithilfe dieser Prozedur werden Vorgänge für mindestens eine Zeile im Fetchpuffer eines Cursors ausgeführt.
sp_cursor wird aufgerufen, indem in einem TDS-Paket (Tabular Data Stream) angegeben ID = 1 wird.
Transact-SQL-Syntaxkonventionen
Syntax
sp_cursor cursor , optype , rownum , table
[ , value [ ...n ] ]
[ ; ]
Argumente
Wichtig
Argumente für erweiterte gespeicherte Prozeduren müssen in der spezifischen Reihenfolge eingegeben werden, wie im Abschnitt Syntax beschrieben. Wenn die Parameter außerhalb der Reihenfolge eingegeben werden, tritt eine Fehlermeldung auf.
Cursor
Das Cursorhandle. Der Cursorparameter ist int und kann nicht sein NULL. Dieser Parameter ist der handle vom Datenbank-Engine generierte Wert und wird von der sp_cursoropen Prozedur zurückgegeben.
optype
Ein erforderlicher Parameter, der angibt, welchen Vorgang der Cursor ausführt. Der Optype-Parameter erfordert einen der folgenden Werte.
| Wert | Name | Beschreibung |
|---|---|---|
0X0001 |
UPDATE |
Wird zum Update mindestens einer Zeile im Fetchpuffer verwendet. Die in Rownum angegebenen Zeilen werden erneut verwendet und aktualisiert. |
0x0002 |
DELETE |
Wird zum Löschen mindestens einer Zeile im Fetchpuffer verwendet. Die zeilen, die in rownum angegeben sind, werden erneut auf sie zugreifen und gelöscht. |
0X0004 |
INSERT |
Fügt Daten ein, ohne eine INSERT Anweisung zu erstellen. |
0X0008 |
REFRESH |
Wird verwendet, um den Puffer aus zugrunde liegenden Tabellen neu zu füllen und kann verwendet werden, um die Zeile zu aktualisieren, wenn ein Update oder Löschvorgang aufgrund eines optimistischen Parallelitätssteuerelements oder nach einem UPDATE. |
0X10 |
LOCK |
Bewirkt, dass eine Aktualisierungssperre (U) auf der Seite mit der angegebenen Zeile abgerufen wird. Diese Sperre ist mit freigegebenen Sperren (S) kompatibel, jedoch nicht mit exklusiven Sperren (X) oder anderen Updatesperren. Kann verwendet werden, um eine kurzfristige Sperre zu implementieren. |
0X20 |
SETPOSITION |
Wird nur verwendet, wenn das Programm eine nachfolgende DELETE oder UPDATE Anweisung ausstellen wird. |
0X40 |
ABSOLUTE |
Kann nur mit UPDATE oder DELETEverwendet werden.
ABSOLUTE wird nur für KEYSET Cursor verwendet (wird für DYNAMIC Cursor ignoriert), und STATIC Cursor können nicht aktualisiert werden.Hinweis: Wenn ABSOLUTE in einer Zeile in der nicht abgerufenen Keysetzeile angegeben wird, schlägt der Vorgang möglicherweise die Parallelitätsprüfung fehl, und das Rückgabeergebnis kann nicht garantiert werden. |
rownum
Gibt an, welche Zeilen im Abrufpuffer der Cursor betreibt, aktualisiert oder löscht. Dieser Parameter wirkt sich nicht auf den Ausgangspunkt eines RELATIVE, NEXToder Abrufvorgangs, PREVIOUS oder auf Aktualisierungen oder Löschvorgänge aus, die mit sp_cursor.
rownum ist ein erforderlicher Parameter, der einen Int-Eingabewert aufruft.
1Gibt die erste Zeile im Fetchpuffer an.
2, 3, 4, ...nKennzeichnet die zweite, dritte und vierte Zeile usw.
0Gibt alle Zeilen im Fetchpuffer an.
Dieser Parameter ist nur für die Verwendung mit UPDATE, , DELETE, REFRESHoder LOCKoptype -Werten gültig.
Tabelle
Der Tabellenname, der die Tabelle identifiziert, für die der Optype gilt, wenn die Cursordefinition eine Verknüpfung umfasst, oder mehrdeutige Spaltennamen werden vom Wertparameter zurückgegeben. Wenn keine bestimmte Tabelle festgelegt ist, ist die Standardeinstellung die erste Tabelle in der FROM Klausel. Der Tabellenparameter ist optional und erfordert einen Zeichenfolgeneingabewert. Die Zeichenfolge kann als beliebiges Zeichen oder Unicode-Datentyp oder als mehrteiliger Tabellenname angegeben werden.
value
Wird zum Einfügen oder Aktualisieren von Werten verwendet. Der Wertzeichenfolgenparameter wird nur mit UPDATE werten und INSERToptype verwendet. Die Zeichenfolge kann als beliebiges Zeichen oder Unicode-Datentyp angegeben werden.
Die Parameternamen für den Wert können vom Benutzer zugewiesen werden.
Rückgabecodewerte
0 (erfolgreich) oder 1 Fehler.
Hinweise
Der Optype-Parameter
Mit Ausnahme der Kombinationen mit SETPOSITIONUPDATE, , DELETE, REFRESHoder LOCK; oder ABSOLUTE mit einem UPDATE oder DELETEoder , die Optype-Werte schließen sich gegenseitig aus.
Die SET Klausel des UPDATE Werts wird aus dem Wertparameter erstellt.
Ein Vorteil der Verwendung des INSERT <optype> Werts besteht darin, dass Sie das Konvertieren von Nicht-Zeichendaten in ein Zeichenformat für Einfügungen vermeiden können. Die Werte werden auf die gleiche Weise wie UPDATE. Wenn erforderliche Spalten nicht enthalten sind, schlägt der INSERT Fehler fehl.
- Der
SETPOSITIONWert wirkt sich nicht auf den Startpunkt einesRELATIVE,NEXToder Abrufvorgangs ausPREVIOUS, oder führen keine Aktualisierungen oder Löschvorgänge aus, die mit dersp_cursorSchnittstelle ausgeführt werden. Jede Zahl, die keine Zeile im Abrufpuffer angibt, führt dazu, dass die Position festgelegt1wird, ohne dass ein Fehler zurückgegeben wird. SobaldSETPOSITIONdie Ausführung erfolgt, bleibt die Position bis zum nächstensp_cursorfetchVorgang, T-SQL-VorgangFETCHodersp_cursorSETPOSITIONVorgang über denselben Cursor wirksam. Bei einem nachfolgendensp_cursorfetchVorgang wird die Position des Cursors auf die erste Zeile im neuen Abrufpuffer festgelegt, während andere Cursoraufrufe den Wert der Position nicht beeinflussen.SETPOSITIONkann durch eineORKlausel mitREFRESH,UPDATE, ,DELETEoderLOCKum den Wert der Position auf die letzte geänderte Zeile festzulegen.
Wenn eine Zeile im Abrufpuffer nicht über den Rownum-Parameter angegeben wird, wird die Position auf 1 festgelegt, ohne dass ein Fehler zurückgegeben wird. Sobald die Position festgelegt ist, bleibt sie wirksam, bis der nächste Vorgang, der T-SQL-Vorgang sp_cursorfetch oder FETCHsp_cursor der vorgang SETPOSITION auf demselben Cursor ausgeführt wird.
SETPOSITION kann durch eine OR Klausel mit REFRESH, UPDATE, , DELETEoder LOCK um die Cursorposition auf die letzte geänderte Zeile festgelegt werden.
Der Rownum-Parameter
Wenn angegeben, kann der Rownum-Parameter als Zeilennummer innerhalb des Keysets anstelle der Zeilennummer innerhalb des Abrufpuffers interpretiert werden. Der Benutzer ist für die Einhaltung der Parallelitätssteuerung verantwortlich. Dies bedeutet, dass Sie für SCROLL_LOCKS Cursor unabhängig voneinander eine Sperre für die angegebene Zeile verwalten müssen (die über eine Transaktion ausgeführt werden kann). Für OPTIMISTIC Cursor müssen Sie die Zeile zuvor abgerufen haben, um diesen Vorgang auszuführen.
Der Tabellenparameter
Wenn der Optype-Wert oder UPDATEINSERT eine vollständige Aktualisierungs- oder Einfüge-Anweisung als Wertparameter übermittelt wird, wird der für die Tabelle angegebene Wert ignoriert.
Hinweis
Im Zusammenhang mit Ansichten kann nur eine Tabelle geändert werden, die an der Ansicht teilnimmt. Die Namen der Wertparameterspalten müssen die Spaltennamen in der Ansicht widerspiegeln, der Tabellenname kann jedoch die der zugrunde liegenden Basistabelle sein (in diesem Fall sp_cursor wird der Ansichtsname ersetzt).
Der Wertparameter
Es gibt zwei Alternativen zu den Regeln für die Verwendung von Werten , wie weiter oben im Abschnitt "Argumente" angegeben:
Sie können einen Namen verwenden, der dem Namen der Spalte in der Auswahlliste für alle benannten
@vorangestellt ist. Ein Vorteil dieser Alternative besteht darin, dass die Datenkonvertierung möglicherweise nicht erforderlich ist.Verwenden Sie einen Parameter, um entweder eine vollständige
UPDATEoderINSERTanweisung zu übermitteln, oder verwenden Sie mehrere Parameter, um Teile einer oderUPDATEAnweisungINSERTzu übermitteln, die die Datenbank-Engine dann in eine vollständige Anweisung integriert. Beispiele finden Sie im Abschnitt "Beispiele " weiter unten in diesem Artikel.
Beispiele
Alternativer Wertparameter verwendet
Für UPDATE
Wenn ein einzelner Parameter verwendet wird, kann eine UPDATE Anweisung mithilfe der folgenden Syntax übermittelt werden:
[ [ UPDATE <table_name> ] SET ] { <column name> = expression } [ , ...n ]
Wenn UPDATE <table_name> angegeben, wird jeder für den Tabellenparameter angegebene Wert ignoriert.
Wenn mehrere Parameter verwendet werden, muss der erste Parameter eine Zeichenfolge in der folgenden Form sein:
[ SET ] <column name> = expression [ , ...n ]
Die nachfolgenden Parameter müssen in Form von:
<column name> = expression [ , ...n ]
In diesem Fall ist die in der konstruierten Update-Anweisung entweder <table_name> angegeben oder standardmäßig vom Tabellenparameter festgelegt.
Für INSERT
Wenn ein einzelner Parameter verwendet wird, kann eine INSERT Anweisung mithilfe der folgenden Syntax übermittelt werden:
[ [ INSERT [ INTO ] <table_name> ] VALUES ] ( <expression> [ , ...n ] )
Wenn INSERT <table_name> angegeben, wird jeder für den Tabellenparameter angegebene Wert ignoriert.
Wenn mehrere Parameter verwendet werden, muss der erste Parameter eine Zeichenfolge in der folgenden Form sein:
[ VALUES ] ( <expression> [ , ...n ] )
Die nachfolgenden Parameter müssen sich in Form von expression [ , ...n ], mit Ausnahme der Angabe, VALUES befinden, in diesem Fall muss nach dem letzten Ausdruck ein nachgestellter ) Parameter vorhanden sein. In diesem Fall ist die in der konstruierten Anweisung entweder <table_name> vom TabellenparameterUPDATE Anweisung.
Hinweis
Es ist möglich, einen Parameter als benannten Parameter zu übermitteln, z. B @values. . In diesem Fall können keine anderen benannten Parameter verwendet werden.