Delen via


sp_cursorprepare (Transact-SQL)

van toepassing op:SQL Server-

Compileert de cursorinstructie of batch in een uitvoeringsplan, maar maakt de cursor niet. De gecompileerde instructie kan later worden gebruikt door sp_cursorexecute. Deze procedure, gekoppeld aan sp_cursorexecute, heeft dezelfde functie als sp_cursoropen, maar wordt gesplitst in twee fasen. sp_cursorprepare wordt aangeroepen door ID = 3 op te geven in een TDS-pakket (tabellaire gegevensstroom).

Transact-SQL syntaxisconventies

Syntaxis

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

Argumenten

Belangrijk

Argumenten voor uitgebreide opgeslagen procedures moeten worden ingevoerd in de specifieke volgorde, zoals beschreven in de sectie Syntaxis. Als de parameters niet in de volgorde zijn ingevoerd, treedt er een foutbericht op.

prepared_handle

Een door SQL Server gegenereerde handle-id die een int--waarde retourneert.

prepared_handle wordt vervolgens aan een sp_cursorexecute procedure geleverd om een cursor te openen. Zodra een ingang is gemaakt, bestaat deze totdat u zich afmeldt of totdat u deze expliciet verwijdert via een sp_cursorunprepare procedure.

params

Identificeert geparameteriseerde instructies. De parameters definitie van variabelen wordt vervangen door parametermarkeringen in de instructie. params is een vereiste parameter die een ntext, ncharof nvarchar invoerwaarde aanroept. Voer een NULL waarde in als de instructie niet is geparameteriseerd.

Gebruik een ntext tekenreeks als invoerwaarde wanneer stmt- wordt geparameteriseerd en de scrollopt PARAMETERIZED_STMT waarde is INGESCHAKELD.

stmt-

Hiermee definieert u de resultatenset van de cursor. De parameter stmt is vereist en roept een ntext-, **nchar of nvarchar invoerwaarde aan.

De regels voor het opgeven van de stmt--waarde zijn hetzelfde als sp_cursoropen, met uitzondering dat het gegevenstype stmt tekenreeks moet worden ntext.

opties

Retourneert een beschrijving van de kolommen van de cursorresultatenset. De -opties parameter is int, met een standaardwaarde van NULL. Als deze is ingesteld op 0x0001, betekent dit RETURN_METADATA.

Schuifoptie. De parameter scrollopt is een optionele parameter waarvoor een van de volgende invoerwaarden is vereist.

Waarde Beschrijving
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

Omdat de aangevraagde waarde mogelijk niet geschikt is voor de cursor die is gedefinieerd door stmt-, dient deze parameter als invoer en uitvoer. In dergelijke gevallen wijst SQL Server een geschikte waarde toe.

Optie voor gelijktijdigheidsbeheer. is een optionele parameter waarvoor een van de volgende invoerwaarden is vereist.

Waarde Beschrijving
0x0001 READ_ONLY
0x0002 SCROLL_LOCKS (voorheen bekend als LOCKCC)
0x0004 OPTIMISTIC (voorheen bekend als OPTCC)
0x0008 OPTIMISTIC (voorheen bekend 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

Net als bij scrollpt, kan SQL Server een andere waarde toewijzen dan de waarde die is aangevraagd.

Opmerkingen

De RPC-statusparameter is een van de volgende waarden:

Waarde Beschrijving
0 Succes
0x0001 Mislukking
1FF6 Kan geen metagegevens retourneren.

Opmerking: De reden hiervoor is dat de instructie geen resultatenset produceert; Het is bijvoorbeeld een INSERT- of DDL-instructie.

Voorbeelden

De volgende code is een voorbeeld van het gebruik van sp_cursorprepare en 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;

Wanneer stmt- wordt geparameteriseerd en de scrollopt-PARAMETERIZED_STMT-waarde wordt ON, heeft de notatie van de tekenreeks de volgende vorm:

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