Sdílet prostřednictvím


sp_cursorprepexec (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure Synapse AnalyticsAnalytics Platform System (PDW)

Zkompiluje plán odeslaného příkazu kurzoru nebo dávky a pak vytvoří a naplní kurzor. sp_cursorprepexec kombinuje funkce sp_cursorprepare a sp_cursorexecute. Tento postup se vyvolá zadáním ID = 5 v paketu TDS (Tabular Data Stream).

Transact-SQL konvence syntaxe

Syntax

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

Argumenty

Důležitý

Argumenty rozšířených uložených procedur musí být zadány v určitém pořadí, jak je popsáno v části Syntaxe. Pokud jsou parametry zadány mimo pořadí, dojde k chybové zprávě.

připravený popisovač

SQL Server vygeneroval připravený popisovač identifikátoru. připravený popisovač je povinný a vrátí .

kurzoru

Sql Server vygeneroval identifikátor kurzoru. kurzor je povinný parametr, který musí být zadán pro všechny následné postupy, které na tomto kurzoru působí, například sp_cursorfetch.

params

Identifikuje parametrizované příkazy. parametry definice proměnných se v příkazu nahradí značkami parametrů. parametr je povinný parametr, který volá ntext, ncharnebo nvarchar vstupní hodnotu.

Poznámka

Pokud je příkaz parametrizován a hodnota scrollopt PARAMETERIZED_STMT je zapnutá, použijte jako vstupní hodnotu řetězec ntext.

příkazu

Definuje sadu výsledků kurzoru. Parametr příkazu je povinný a volá ntext, ncharnebo nvarchar vstupní hodnotu.

Poznámka

Pravidla pro zadání příkazu jsou stejná jako pro sp_cursoropen, s výjimkou, že příkaz řetězcový datový typ musí být ntext.

možnosti

Volitelný parametr, který vrátí popis sloupců sady výsledků kurzoru. možnosti vyžadují následující vstupní hodnotu.

Hodnota Popis
0x0001 RETURN_METADATA

scrollopt

Možnost posouvání scrollopt je volitelný parametr, který vyžaduje jeden z následujících int vstupních hodnot.

Hodnota Popis
0x0001 SADA KLÍČŮ
0x0002 DYNAMICKÝ
0x0004 FORWARD_ONLY
0x0008 STATICKÝ
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

Vzhledem k možnosti, že požadovaná možnost není vhodná pro kurzor definovaný příkazem, tento parametr slouží jako vstup i výstup. V takových případech SQL Server přiřadí odpovídající typ a upraví tuto hodnotu.

Možnost řízení souběžnosti je volitelný parametr, který vyžaduje jednu z následujících int vstupních hodnot.

Hodnota Popis
0x0001 READ_ONLY
0x0002 SCROLL_LOCKS (dříve označované jako LOCKCC)
0x0004 OPTIMISTIC (dříve označovaný jako OPTCC)
0x0008 OPTIMISTIC (dříve označovaný jako 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

Stejně jako u scrolloptmůže SQL Server přiřadit jinou hodnotu než požadovanou hodnotu.

počtu řádků

Volitelný parametr, který označuje počet řádků vyrovnávací paměti, které se mají použít s AUTO_FETCH. Výchozí hodnota je 20 řádků. počet řádků se při přiřazení jako vstupní hodnota a návratové hodnoty chová odlišně.

Jako vstupní hodnota Jako návratová hodnota
Pokud AUTO_FETCH zadáte kurzory FAST_FORWARD počet řádků představuje počet řádků, které se mají umístit do vyrovnávací paměti pro načtení. Představuje počet řádků v sadě výsledků. Pokud je zadána hodnota scrollopt AUTO_FETCH, počet řádků vrátí počet řádků, které byly načteny do vyrovnávací paměti pro načtení.

parameter_name

Určuje jeden nebo více názvů parametrů definovaných v parametrech argumentu. Musí existovat parametr zadaný pro každý parametr zahrnutý v params. Tento argument není vyžadován, pokud příkaz Transact-SQL nebo dávka v params nemá definované žádné parametry.

Návratové hodnoty kódu

Pokud parametry vrátí hodnotu NULL, příkaz není parametrizován.

Příklady

Tento příklad ukazuje použití sp_cursorprepexec. Spustí dotaz na tabulku Person v databázi AdventureWorks2022, která vrátí všechny záznamy, kde je jméno 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;