Dela via


sp_cursorprepexec (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalysplattformssystem (PDW)SQL-databas i Förhandsversion av Microsoft Fabric

Kompilerar en plan för den skickade markörsatsen eller batchen och skapar och fyller sedan markören. sp_cursorprepexec kombinerar funktionerna i sp_cursorprepare och sp_cursorexecute. Den här proceduren anropas genom att ange ID = 5 i ett TDS-paket (Tabular Data Stream).

Transact-SQL syntaxkonventioner

Syntax

sp_cursorprepexec prepared handle OUTPUT , cursor OUTPUT , params , statement , options
    [ , scrollopt [ , ccopt [ , rowcount ] ] ]
    [ , '@parameter_name [ , ...n ]' ]

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.

förberett handtag

En SQL Server-genererad förberedd handtag identifierare. Den förberedda referensparametern krävs och returnerar int.

markören

DEN SQL Server-genererade markören identifierare. Markörparametern är en obligatorisk parameter som måste anges för alla efterföljande procedurer som agerar på den här markören, till exempel sp_cursorfetch.

params

Identifierar parametriserade instruktioner. params definition av variabler ersätts med parametermarkörer i -instruktionen. Parametern params krävs. När detta anges anropar params ett ntext-, nchar- eller nvarchar-indatavärde .

Not

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

-instruktion

Definierar markörens resultatuppsättning. Parametern -instruktionen krävs och anropar ett ntext-, nchareller nvarchar indatavärde.

Not

Reglerna för att ange instruktionsvärdet är desamma som sp_cursoropen, med undantag för att instruktionssträngens datatyp måste vara ntext.

alternativ

En valfri parameter som returnerar en beskrivning av kolumnerna i markörresultatuppsättningen. Alternativparametern kräver följande indatavärde i int.

Värde Beskrivning
0x0001 RETURN_METADATA

scrollopt

Rullningsalternativ. Parametern scrollopt är valfri. När detta anges kräver scrollopt något av följande indatavärden i indata .

Värde Beskrivning
0x0001 NYCKELUPPSÄTTNING
0x0002 DYNAMISK
0x0004 FORWARD_ONLY
0x0008 STATISK
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

På grund av möjligheten att det begärda alternativet inte är lämpligt för markören som definieras av -instruktionenfungerar den här parametern både som indata och utdata. I sådana fall tilldelar SQL Server en lämplig typ och ändrar det här värdet.

ccopt

Alternativ för samtidighetskontroll. Ccopt-parametern är valfri. När den anges kräver ccopt-parametern något av följande indatavärden.

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

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

rowcount

En valfri parameter som anger antalet hämtningsbuffertar som ska användas med AUTO_FETCH. Standardvärdet är 20 rader. Parametern rowcount fungerar annorlunda när den tilldelas som ett indatavärde jämfört med ett returvärde.

Som indatavärde Som returvärde
När AUTO_FETCH anges med FAST_FORWARD markörer radantalet representerar antalet rader som ska placeras i hämtningsbufferten. Representerar antalet rader i resultatuppsättningen. När värdet för scrolloptAUTO_FETCH har angetts returnerar rowcount antalet rader som hämtades till hämtningsbufferten.

parameter_name

Anger ett eller flera parameternamn enligt definitionen i parametern params . Det måste finnas en parameter som anges för varje parameter som ingår i params. Den här parametern krävs inte när Transact-SQL-instruktionen eller batchen i params inte har några definierade parametrar.

Returnera kodvärden

Om värdet params returnerar NULLparameteriseras inte -instruktionen.

Exempel

Det här exemplet visar användningen av sp_cursorprepexec. Den kör en fråga mot Person tabellen i AdventureWorks2022 databasen som returnerar alla poster där förnamnet är "Kirby".

USE AdventureWorks2022;
GO

DECLARE @prep_handle INT,
    @cursor INT,
    @scrollopt INT = 4104,
    @ccopt INT = 8193,
    @rowcnt INT;

EXECUTE 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,
    'Kirby';

EXECUTE sp_cursorfetch @cursor;