sp_cursorprepexec (Transact-SQL)

Gilt für: SQL Server (alle unterstützten Versionen) Azure SQL Database 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 SQL Server generierter vorbereiteter Handle-Bezeichner. Vorbereiteter Handle ist erforderlich und gibt int zurück.

Cursor

Der SQL Server generierten Cursorbezeichner. cursor ist ein erforderlicher Parameter, der für alle nachfolgenden Prozeduren angegeben werden muss, die auf diesen Cursor wirken, z. B sp_cursorfetch. .

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 ist und der scrollopt PARAMETERIZED_STMT Wert ON ist.

statement

Definiert das Resultset des Cursors. Der Anweisungsparameter ist erforderlich und ruft einen ntext-, nchar- oder nvarchar-Eingabewert auf.

Hinweis

Die Regeln zum Angeben des Anweisungswerts sind identisch mit denen für sp_cursoropen, mit der Ausnahme, dass der Datentypder Anweisungszeichenfolge ntext sein muss.

options

Ein optionaler Parameter, der eine Beschreibung der Spalten im Cursorresultset zurückgibt. Optionen erfordern den folgenden int-Eingabewert .

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 nicht für den durch die Anweisung definierten Cursor 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.

ccopt

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 OPTIMISTIC (vormals bekannt als OPTCC)
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 beim Scrollopt können SQL Server einen anderen Wert als den angeforderten 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 es als Eingabewert und als Rückgabewert zugewiesen wird.

Als Eingabewert Als Rückgabewert
Wenn AUTO_FETCH mit FAST_FORWARD cursors rowcount die Anzahl der Zeilen an, die im Abrufpuffer platziert werden sollen. Stellt die Anzahl der Zeilen im Resultset dar. Wenn der scrollopt AUTO_FETCH Wert angegeben wird, gibt rowcount die Anzahl der Zeilen zurück, die in den Abrufpuffer abgerufen wurden.

parameter_name

Legt einen oder mehrere Parameternamen fest, wie im Argument params definiert. Für jeden Parameter, der in Params enthalten ist, muss ein Parameter angegeben werden. Dieses Argument ist nicht erforderlich, wenn für die Transact-SQL-Anweisung oder der Batch in Params keine Parameter definiert sind.

Rückgabecodewerte

Wenn params einen NULL-Wert zurückgibt, wird die Anweisung nicht parametrisiert.

Beispiele

In diesem Beispiel wird die Verwendung von sp_cursorprepexecveranschaulicht. Es wird eine Abfrage für die Person Tabelle in der AdventureWorks2019 Datenbank ausgeführt, die alle Datensätze mit dem Vornamen "Katherine" zurückgibt.

USE AdventureWorks2019;

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;

Siehe auch