Dela via


sp_cursorprepexec (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure Synapse AnalyticsAnalytics Platform System (PDW)

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. förberedd handtag krävs och returnerar int.

markören

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

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.

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 -instruktionen värdet är samma som för sp_cursoropen, med undantag för att -instruktionen strängdatatyp måste vara ntext.

alternativ

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

Värde Beskrivning
0x0001 RETURN_METADATA

scrollopt

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

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 ä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 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ämtningsbuffertrader som ska användas med AUTO_FETCH. Standardvärdet är 20 rader. rowcount fungerar annorlunda när det 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 scrollopt AUTO_FETCH anges returnerar rowcount antalet rader som hämtades till hämtningsbufferten.

parameter_name

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

Returnera kodvärden

Om params returnerar ett NULL värde parametriseras inte -instruktionen.

Exempel

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

USE AdventureWorks2022;
GO

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

EXEC 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,
    'Katherine';

EXEC sp_cursorfetch @cursor;