Dela via


sp_cursorprepare (Transact-SQL)

gäller för:SQL Server

Kompilerar markörens instruktion eller batch till en körningsplan, men skapar inte markören. Den kompilerade instruktionen kan senare användas av sp_cursorexecute. Den här proceduren, tillsammans med sp_cursorexecute, har samma funktion som sp_cursoropen, men är uppdelad i två faser. sp_cursorprepare anropas genom att ange ID = 3 i ett TDS-paket (Tabular Data Stream).

Transact-SQL syntaxkonventioner

Syntax

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

Argument

Viktig

Argument för utökade lagrade procedurer måste anges i den specifika ordning som beskrivs i avsnittet Syntax. Om parametrarna anges i fel ordning visas ett felmeddelande.

prepared_handle

En SQL Server-genererad förberedd handle identifierare som returnerar ett int- värde.

prepared_handle skickas sedan till en sp_cursorexecute procedur för att öppna en markör. När ett handtag har skapats finns det tills du loggar ut, eller tills du uttryckligen tar bort det via en sp_cursorunprepare procedur.

params

Identifierar parametriserade instruktioner. params definition av variabler ersätts med parametermarkörer i -instruktionen. params är en obligatorisk parameter som anropar ett ntext, nchareller nvarchar indatavärde. Ange ett NULL värde om instruktionen inte är parameteriserad.

Använd en ntext- sträng som indatavärde när stmt parametriseras och scrollopt- PARAMETERIZED_STMT värdet är PÅ.

stmt

Definierar markörens resultatuppsättning. Parametern stmt krävs och anropar ett ntext-, **nchar eller nvarchar indatavärde.

Reglerna för att ange värdet stmt är samma som sp_cursoropen, med undantag för att stmt strängdatatyp måste vara ntext.

alternativ

Returnerar en beskrivning av kolumnerna för markörresultatuppsättningen. De alternativen parametern är int, med standardvärdet NULL. När värdet är inställt på 0x0001innebär det RETURN_METADATA.

scrollopt

Rullningsalternativ. Parametern scrollopt är en valfri parameter som kräver något av följande int indatavärden.

Värde Beskrivning
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

Eftersom det begärda värdet kanske inte är lämpligt för markören som definieras av stmtfungerar den här parametern både som indata och utdata. I sådana fall tilldelar SQL Server ett lämpligt värde.

ccopt

Alternativ för samtidighetskontroll. ccopt är en valfri parameter som kräver något av följande int indatavärden.

Värde Beskrivning
0x0001 READ_ONLY
0x0002 SCROLL_LOCKS (tidigare känt som LOCKCC)
0x0004 OPTIMISTIC (tidigare känt som OPTCC)
0x0008 OPTIMISTIC (tidigare känt som 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

Precis som med scrollptkan SQL Server tilldela ett annat värde än det som begärdes.

Anmärkningar

RPC-statusparametern är ett av följande värden:

Värde Beskrivning
0 Framgång
0x0001 Misslyckande
1FF6 Det gick inte att returnera metadata.

Obs! Orsaken till detta är att -instruktionen inte ger någon resultatuppsättning. Det är till exempel en INSERT- eller DDL-instruktion.

Exempel

Följande kod är ett exempel på hur du använder sp_cursorprepare och 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;

När stmt parametriseras och värdet scrolloptPARAMETERIZED_STMT är ON, är strängformatet i följande formulär:

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