Sdílet prostřednictvím


sp_cursor (Transact-SQL)

platí pro:SQL Server

Požadavky umístěné aktualizace. Tento postup provádí operace na jednom nebo více řádcích v vyrovnávací paměti kurzoru. sp_cursor se vyvolá zadáním ID = 1 v paketu TDS (Tabular Data Stream).

Transact-SQL konvence syntaxe

Syntax

sp_cursor cursor , optype , rownum , table
    [ , value [ ...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ě.

kurzoru

Úchyt kurzoru. Parametr kurzoru je inta nemůže být NULL. Tento parametr je hodnota handle vygenerovaná databázovým strojem a vrácená procedurou sp_cursoropen.

optype

Povinný parametr, který určuje, jakou operaci kurzor provádí. Parametr optype vyžaduje jednu z následujících hodnot.

Hodnota Jméno Popis
0X0001 UPDATE Slouží k aktualizaci jednoho nebo více řádků v vyrovnávací paměti pro načítání. Řádky zadané v řádku se znovu zpřístupní a aktualizují.
0x0002 DELETE Slouží k odstranění jednoho nebo více řádků v vyrovnávací paměti pro načtení. Řádky zadané v řádku se znovu zpřístupňují a odstraňují.
0X0004 INSERT Vloží data bez sestavení příkazu INSERT.
0X0008 REFRESH Slouží k obnovení vyrovnávací paměti z podkladových tabulek a lze ji použít k aktualizaci řádku, pokud aktualizace nebo odstranění selže kvůli optimistickému řízení souběžnosti nebo po UPDATE.
0X10 LOCK Způsobí získání zámku aktualizace (U) na stránce obsahující zadaný řádek. Tento zámek je kompatibilní se sdílenými zámky (S), ale ne s výhradními zámky (X) nebo jinými zámky aktualizací. Lze použít k implementaci krátkodobého uzamčení.
0X20 SETPOSITION Používá se pouze v případech, kdy program vydá následující příkaz DELETE nebo UPDATE.
0X40 ABSOLUTE Lze použít pouze s UPDATE nebo DELETE. ABSOLUTE se používá jenom s KEYSET kurzory (jsou ignorovány pro DYNAMIC kurzory) a STATIC kurzory nelze aktualizovat.

Poznámka: Pokud je ABSOLUTE zadán na řádku v sadě klíčů, která nebyla načtena, může operace selhat kontrolu souběžnosti a návratový výsledek nelze zaručit.

řádku

Určuje, na kterých řádcích v vyrovnávací paměti kurzor pracuje, aktualizuje nebo odstraní. Tento parametr nemá vliv na výchozí bod žádného RELATIVE, NEXTani PREVIOUS operace načítání ani aktualizace ani odstranění provedené pomocí sp_cursor.

řádku je povinný parametr, který volá int vstupní hodnotu.

  • 1

    Označuje první řádek v vyrovnávací paměti pro načtení.

  • 2, 3, 4, ...n

    Označuje druhý, třetí a čtvrtý řádek a tak dále.

  • 0

    Označuje všechny řádky v vyrovnávací paměti pro načtení.

Tento parametr je platný pouze pro použití s hodnotami UPDATE, DELETE, REFRESHnebo LOCKoptype.

tabulky

Název tabulky, která identifikuje tabulku, která optype platí, pokud definice kurzoru zahrnuje spojení, nebo nejednoznačné názvy sloupců vrátí hodnota parametru. Pokud není určena žádná konkrétní tabulka, výchozí je první tabulka v klauzuli FROM. Parametr tabulky je volitelný a vyžaduje řetězcovou vstupní hodnotu. Řetězec lze zadat jako libovolný znak nebo datový typ Unicode nebo název tabulky s více částmi.

hodnoty

Slouží k vložení nebo aktualizaci hodnot. Hodnota řetězcový parametr se používá pouze s hodnotami UPDATE a INSERToptype. Řetězec lze zadat jako libovolný znak nebo datový typ Unicode.

Názvy parametrů pro hodnotu může přiřadit uživatel.

Návratové hodnoty kódu

0 (úspěch) nebo 1 (selhání).

Poznámky

Parametr optype

S výjimkou kombinací SETPOSITION s UPDATE, DELETE, REFRESHnebo LOCK; nebo ABSOLUTE s UPDATE nebo DELETE, optype hodnoty se vzájemně vylučují.

Klauzule SET hodnoty UPDATE je vytvořena z parametru hodnota.

Jednou z výhod použití hodnoty INSERT <optype> je, že se můžete vyhnout převodu neznakových dat do formátu znaků pro vložení. Hodnoty jsou zadány stejným způsobem jako UPDATE. Pokud nejsou zahrnuty nějaké požadované sloupce, INSERT selže.

  • Hodnota SETPOSITION nemá vliv na výchozí bod žádného RELATIVE, NEXTani PREVIOUS operace načtení, ani na žádné aktualizace ani odstranění provedené pomocí rozhraní sp_cursor. Jakékoli číslo, které nezadá řádek v vyrovnávací paměti pro načtení, má za následek nastavení pozice 1, bez vrácení chyby. Po provedení SETPOSITION zůstane pozice platná až do další operace sp_cursorfetch, operace FETCH T-SQL nebo operace sp_cursorSETPOSITION pomocí stejného kurzoru. Následující operace sp_cursorfetch nastaví pozici kurzoru na první řádek v nové vyrovnávací paměti pro načtení, zatímco jiná volání kurzoru neovlivní hodnotu pozice. SETPOSITION lze propojit klauzulí OR s klauzulí REFRESH, UPDATE, DELETEnebo LOCK, aby se hodnota pozice na poslední změněný řádek nastavil.

Pokud není řádek v vyrovnávací paměti pro načtení zadaný prostřednictvím parametru řádku, je pozice nastavená na hodnotu 1 bez vrácených chyb. Jakmile je pozice nastavená, zůstane v platnosti až do další operace sp_cursorfetch, operace T-SQL FETCH nebo sp_cursorSETPOSITION operace se provede na stejném kurzoru.

SETPOSITION lze propojit pomocí klauzule OR s REFRESH, UPDATE, DELETEnebo LOCK nastavit pozici kurzoru na poslední upravený řádek.

Parametr řádku

Pokud je zadán, lze parametr řádek interpretovat jako číslo řádku v rámci sady klíčů místo čísla řádku v vyrovnávací paměti pro načtení. Uživatel zodpovídá za zajištění zachování řízení souběžnosti. To znamená, že pro SCROLL_LOCKS kurzory musíte nezávisle udržovat zámek na daném řádku (který lze provést prostřednictvím transakce). Pro OPTIMISTIC kurzory musíte předtím načíst řádek pro provedení této operace.

Parametr tabulky

Pokud je hodnota optype UPDATE nebo INSERT a jako parametr hodnota se odešle úplná aktualizace nebo příkaz insert, hodnota zadaná pro tabulky se ignoruje.

Poznámka

Pokud jde o zobrazení, může být změněna pouze jedna tabulka, která se v zobrazení účastní. Hodnota názvy sloupců parametrů musí odrážet názvy sloupců v zobrazení, ale název tabulky může být název podkladové základní tabulky (v takovém případě sp_cursor nahradí název zobrazení).

Parametr hodnoty

Existují dvě alternativy pravidel pro použití hodnoty , jak je uvedeno výše v části Argumenty:

  1. Můžete použít název, který je @ před názvem sloupce v seznamu select pro všechny pojmenované hodnoty parametry. Jednou z výhod této alternativy je, že převod dat nemusí být nutný.

  2. Parametr použijte k odeslání kompletního příkazu UPDATE nebo INSERT nebo použití více parametrů k odeslání částí příkazu UPDATE nebo INSERT, který pak databázový stroj sestaví do kompletního příkazu. Příklady najdete v části Příklady dále v tomto článku.

Příklady

Alternativní parametr hodnoty používá

Pro AKTUALIZACI

Při použití jednoho parametru může být příkaz UPDATE odeslán pomocí následující syntaxe:

[ [ UPDATE <table_name> ] SET ] { <column name> = expression } [ , ...n ]

Pokud je zadán UPDATE <table_name>, bude ignorována jakákoli hodnota zadaná pro parametr tabulky.

Při použití více parametrů musí být první parametr řetězcem v následujícím formátu:

[ SET ] <column name> = expression [ , ...n ]

Následující parametry musí být ve formě:

<column name> = expression [ , ...n ]

V tomto případě je <table_name> v konstruovaném příkazu update zadaným parametrem tabulky nebo ve výchozím nastavení.

Pro INSERT

Při použití jednoho parametru může být příkaz INSERT odeslán pomocí následující syntaxe:

[ [ INSERT [ INTO ] <table_name> ] VALUES ] ( <expression> [ , ...n ] )

Pokud je zadán INSERT <table_name>, bude ignorována jakákoli hodnota zadaná pro parametr tabulky.

Při použití více parametrů musí být první parametr řetězcem v následujícím formátu:

[ VALUES ] ( <expression> [ , ...n ] )

Následující parametry musí být ve formě expression [ , ...n ], s výjimkou případů, kdy byla zadána VALUES, v takovém případě musí být za posledním výrazem koncová ). V tomto případě je <table_name> v konstruovaném příkazu UPDATE buď zadaný, nebo výchozí hodnotou parametru table.

Poznámka

Jeden parametr je možné odeslat jako pojmenovaný parametr, například @values. V tomto případě nelze použít žádné jiné pojmenované parametry.