sp_cursorprepexec (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure Synapse Analytics Analytics Platform System (PDW)
Kompiliert einen Plan für die gesendete Cursoranweisung oder den gesendeten Batch, erstellt dann den Cursor und füllt ihn auf. sp_cursorprepexec
kombiniert die Funktionen von sp_cursorprepare
und sp_cursorexecute
. Diese Prozedur wird aufgerufen, indem in einem TDS-Paket (Tabular Data Stream) angegeben ID = 5
wird.
Transact-SQL-Syntaxkonventionen
Syntax
sp_cursorprepexec prepared handle OUTPUT , cursor OUTPUT , params , statement , options
[ , scrollopt [ , ccopt [ , rowcount ] ] ]
[ , '@parameter_name [ , ...n ]' ]
Argumente
vorbereiteter Handle
Ein VON SQL Server generierter Handlebezeichner . Vorbereiteter Handle ist erforderlich und gibt int zurück.
Cursor
Der sql Server generierte Cursorbezeichner . Cursor ist ein erforderlicher Parameter, der für alle nachfolgenden Prozeduren bereitgestellt werden muss, die auf diesen Cursor reagieren, sp_cursorfetch
z. B. .
params
Identifiziert parametrisierte Anweisungen. Die params -Definition der Variablen wird in der Anweisung an die Stelle der Parametermarkierungen gesetzt. params ist ein erforderlicher Parameter, der einen Eingabewert vom Typ ntext, nchar,oder nvarchar erfordert.
Hinweis
Verwenden Sie eine ntext-Zeichenfolge als Eingabewert, wenn die Anweisung parametrisiert wird, und der Scrollopt-PARAMETERIZED_STMT Wert ist EIN.
Anweisung
Definiert das Resultset des Cursors. Der Anweisungsparameter ist erforderlich und ruft einen ntext-, nchar- oder nvarchar-Eingabewert auf.
Hinweis
Die Regeln für die Angabe des Anweisungswerts sind identisch mit denen für sp_cursoropen
, mit der Ausnahme, dass der Datentyp der Anweisungszeichenfolge ntext sein muss.
Optionen
Ein optionaler Parameter, der eine Beschreibung der Spalten im Cursorresultset zurückgibt. für Optionen ist der folgende Int-Eingabewert erforderlich.
Wert | Beschreibung |
---|---|
0x0001 |
RETURN_METADATA |
scrollopt
Option für den Bildlauf. scrollopt ist ein optionaler Parameter, der einen der folgenden Int-Eingabewerte erfordert.
Wert | Beschreibung |
---|---|
0x0001 |
KEYSET |
0x0002 |
DYNAMIC |
0x0004 |
FORWARD_ONLY |
0x0008 |
STATIC |
0x10 |
FAST_FORWARD |
0x1000 |
PARAMETERIZED_STMT |
0x2000 |
AUTO_FETCH |
0x4000 |
AUTO_CLOSE |
0x8000 |
CHECK_ACCEPTED_TYPES |
0x10000 |
KEYSET_ACCEPTABLE |
0x20000 |
DYNAMIC_ACCEPTABLE |
0x40000 |
FORWARD_ONLY_ACCEPTABLE |
0x80000 |
STATIC_ACCEPTABLE |
0x100000 |
FAST_FORWARD_ACCEPTABLE |
Aufgrund der Möglichkeit, dass die angeforderte Option für den durch Anweisung definierten Cursor nicht geeignet ist, dient dieser Parameter sowohl als Eingabe als auch als Ausgabe. In solchen Fällen weist SQL Server einen geeigneten Typ zu und ändert diesen Wert.
Kcopt
Option für die Parallelitätssteuerung. ccopt ist ein optionaler Parameter, der einen der folgenden Int-Eingabewerte erfordert.
Wert | Beschreibung |
---|---|
0x0001 |
READ_ONLY |
0x0002 |
SCROLL_LOCKS (vormals bekannt als LOCKCC) |
0x0004 |
OPTIMISTISCH (früher als OPTCC bezeichnet) |
0x0008 |
OPTIMISTIC (vormals bekannt als OPTCCVAL) |
0x2000 |
ALLOW_DIRECT |
0x4000 |
UPDT_IN_PLACE |
0x8000 |
CHECK_ACCEPTED_OPTS |
0x10000 |
READ_ONLY_ACCEPTABLE |
0x20000 |
SCROLL_LOCKS_ACCEPTABLE |
0x40000 |
OPTIMISTIC_ACCEPTABLE |
0x80000 |
OPTIMISITC_ACCEPTABLE |
Wie bei scrollopt kann SQL Server einen anderen Wert als die angeforderte zuweisen.
Rowcount
Ein optionaler Parameter, der die Anzahl der Abrufpufferzeilen angibt, die mit AUTO_FETCH verwendet werden sollen. Der Standardwert ist 20 Zeilen. Rowcount verhält sich anders, wenn ein Eingabewert als Eingabewert oder ein Rückgabewert zugewiesen wird.
Als Eingabewert | Als Rückgabewert |
---|---|
Wenn AUTO_FETCH mit FAST_FORWARD Cursorzeilenanzahl angegeben wird, stellt die Anzahl der Zeilen dar, die in den Abrufpuffer eingefügt werden sollen. | Stellt die Anzahl der Zeilen im Resultset dar. Wenn der Scrollopt-AUTO_FETCH Wert angegeben ist, gibt der Zeilenanzahlwert die Anzahl der Zeilen zurück, die im Abrufpuffer abgerufen wurden. |
parameter_name
Legt einen oder mehrere Parameternamen fest, die im Params-Argument definiert sind. Für jeden Parameter, der in Params enthalten ist, muss ein Parameter angegeben werden. Dieses Argument ist nicht erforderlich, wenn die Transact-SQL-Anweisung oder der Batch in Params keine Parameter definiert hat.
Rückgabecodewerte
Wenn Params einen NULL
Wert zurückgibt, wird die Anweisung nicht parametrisiert.
Beispiele
In diesem Beispiel wird die Verwendung von sp_cursorprepexec
. Es wird eine Abfrage für die Tabelle in der Person
Datenbank ausgeführt, die AdventureWorks2022
alle Datensätze zurückgibt, bei denen der Vorname "Katherine" lautet.
USE AdventureWorks2022;
GO
DECLARE @prep_handle INT,
@cursor INT,
@scrollopt INT = 4104,
@ccopt INT = 8193,
@rowcnt INT;
EXEC sp_cursorprepexec
@prep_handle OUTPUT,
@cursor OUTPUT,
N'@fName nvarchar(100)',
N'SELECT FirstName, LastName FROM Person.Person WHERE FirstName = @fName',
@scrollopt,
@ccopt,
@rowcnt OUTPUT,
'Katherine';
EXEC sp_cursorfetch @cursor;