Teilen über


sp_cursorprepare (Transact-SQL)

Gilt für: SQL Server

Kompiliert die Cursor-Anweisung oder den Batch in einen Ausführungsplan, erstellt jedoch nicht den Cursor. Die kompilierte Anweisung kann später von sp_cursorexecute. Dieses Verfahren, gekoppelt mit sp_cursorexecute, hat die gleiche Funktion wie sp_cursoropen, aber wird in zwei Phasen aufgeteilt. sp_cursorprepare wird aufgerufen, indem in einem TDS-Paket (Tabular Data Stream) angegeben ID = 3 wird.

Transact-SQL-Syntaxkonventionen

Syntax

sp_cursorprepare prepared_handle OUTPUT , params , stmt , options
    [ , scrollopt [ , ccopt ] ]
[ ; ]

Argumente

prepared_handle

Ein sql Server-generierter vorbereiteter handle Bezeichner, der einen Int-Wert zurückgibt.

prepared_handle wird dann an eine sp_cursorexecute Prozedur übergeben, um einen Cursor zu öffnen. Sobald ein Handle erstellt wurde, ist es vorhanden, bis Sie sich abmelden oder bis Sie es explizit über eine sp_cursorunprepare Prozedur entfernen.

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. Geben Sie einen Wert ein NULL , wenn die Anweisung nicht parametrisiert ist.

Verwenden Sie eine ntext-Zeichenfolge als Eingabewert, wenn stmt parametrisiert wird und der Scrollopt-PARAMETERIZED_STMT Wert EIN ist.

stmt

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

Die Regeln zum Angeben des Stmt-Werts sind identisch mit sp_cursoropender Ausnahme, dass der Datentyp stmt-Zeichenfolge ntext sein muss.

Optionen

Gibt eine Beschreibung der Cursorergebnissatzspalten zurück. Der Optionsparameter ist int mit einem Standardwert von NULL. Bei Festlegung auf 0x0001, bedeutet RETURN_METADATAdies .

scrollopt

Option für den Bildlauf. Der Scrollopt-Parameter 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

Da der angeforderte Wert möglicherweise nicht für den durch stmt definierten Cursor geeignet ist, dient dieser Parameter sowohl als Eingabe als auch als Ausgabe. In solchen Fällen weist SQL Server einen passenden Wert zu.

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 (früher bekannt als LOCKCC)
0x0004 OPTIMISTIC (früher bekannt als OPTCC)
0x0008 OPTIMISTIC (früher 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 OPTIMISTIC_ACCEPTABLE

Wie beim Scrollen kann SQL Server einen anderen Wert als die angeforderte zuweisen.

Hinweise

Der RPC-Statusparameter ist einer der folgenden Werte:

Wert Beschreibung
0 Erfolg
0x0001 Fehler
1FF6 Metadaten konnten nicht zurückgegeben werden.

Hinweis: Der Grund dafür ist, dass die Anweisung kein Resultset erzeugt, z. B. eine DDL-Anweisung oder eine INSERT DDL-Anweisung.

Beispiele

Der folgende Code ist ein Beispiel für die Verwendung sp_cursorprepare und sp_cursorexecute:

DECLARE @handle INT, @p5 INT, @p6 INT;

EXEC sp_cursorprepare @handle OUTPUT,
    N'@dbid int',
    N'select * from sys.databases where database_id < @dbid',
    1,
    @p5 OUTPUT,
    @p6 OUTPUT;

DECLARE @p1 INT
SET @P1 = @handle;

DECLARE @p2 INT;
DECLARE @p3 INT;
DECLARE @p4 INT;

SET @P6 = 4;

EXEC sp_cursorexecute @p1,
    @p2 OUTPUT,
    @p3 OUTPUT,
    @p4 OUTPUT,
    @p5 OUTPUT,
    @p6;

EXEC sp_cursorfetch @P2;
EXEC sp_cursorunprepare @handle;
EXEC sp_cursorclose @p2;

Wenn stmt parametrisiert wird und der Scrollopt-Wert PARAMETERIZED_STMT lautet ON, ist das Format der Zeichenfolge in der folgenden Form:

<parameter_name> <data_type> [ ,... n ]