sp_cursorprepare (Transact-SQL)

Gilt für:SQL Server

Kompiliert die Cursoranweisung oder den Batch in einen Ausführungsplan, erstellt jedoch keinen Cursor. Die kompilierte Anweisung kann später von sp_cursorexecute verwendet werden. Dieses Verfahren in Verbindung mit sp_cursorexecute hat dieselbe Funktion wie sp_cursoropen, ist aber in zwei Phasen unterteilt. sp_cursorprepare wird durch Angabe der ID = 3 in einem TDS-Paket (Tabular Data Stream) aufgerufen.

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 ganzzahligen Wert zurückgibt.

Hinweis

prepared_handle wird anschließend an eine sp_cursorexecute Prozedur übermittelt, um einen Cursor zu öffnen. Nach der Erstellung bleibt ein Handle so lange bestehen, bis Sie sich abmelden oder es über die sp_cursorunprepare-Prozedur explizit 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 NULL-Wert ein, wenn die Anweisung nicht parametrisiert ist.

Hinweis

Verwenden Sie eine ntext-Zeichenfolge als Eingabewert, wenn stmt parametrisiert ist und der scrollopt PARAMETERIZED_STMT Wert ON ist.

Stmt
Definiert das Resultset des Cursors. Der stmt -Parameter ist erforderlich und erfordert einen der Eingabewerte ntext, nchar oder nvarchar .

Hinweis

Die Regeln zum Angeben des stmt-Werts sind identisch mit denen für sp_cursoropen, mit der Ausnahme, dass der Stmt-Zeichenfolgendatentyp ntext sein muss.

options
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
Scroll-Option. 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

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.

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 (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 beim Scrollen können SQL Server einen anderen Wert als den angeforderten zuweisen.

Bemerkungen

Der RPC-Statusparameter entspricht einem der folgenden Werte:

Wert BESCHREIBUNG
0 Erfolgreich
0x0001 Fehler
1FF6 Es konnten keine Metadaten zurückgegeben werden.

Hinweis: Der Grund dafür ist, dass die Anweisung kein Resultset erzeugt. Beispielsweise handelt es sich um eine INSERT- oder DDL-Anweisung.

Beispiele

Im Folgenden finden Sie ein Beispiel für die Verwendung von 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 ist und der scrollopt PARAMETERIZED_STMT Wert ON ist, lautet das Format der Zeichenfolge wie folgt:

{ <Name> der lokalen Variablen**<Datentyp> } [ ,... n ]

Weitere Informationen

sp_cursorexecute (Transact-SQL)
sp_cursoropen (Transact-SQL)
sp_cursorunprepare (Transact-SQL)
Gespeicherte Systemprozeduren (Transact-SQL)