Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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).
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.
1Označuje první řádek v vyrovnávací paměti pro načtení.
2, 3, 4, ...nOznačuje druhý, třetí a čtvrtý řádek a tak dále.
0Označ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
SETPOSITIONnemá vliv na výchozí bod žádnéhoRELATIVE,NEXTaniPREVIOUSoperace 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í pozice1, bez vrácení chyby. Po provedeníSETPOSITIONzůstane pozice platná až do další operacesp_cursorfetch, operaceFETCHT-SQL nebo operacesp_cursorSETPOSITIONpomocí stejného kurzoru. Následující operacesp_cursorfetchnastaví pozici kurzoru na první řádek v nové vyrovnávací paměti pro načtení, zatímco jiná volání kurzoru neovlivní hodnotu pozice.SETPOSITIONlze propojit klauzulíORs klauzulíREFRESH,UPDATE,DELETEneboLOCK, 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:
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ý.Parametr použijte k odeslání kompletního příkazu
UPDATEneboINSERTnebo použití více parametrů k odeslání částí příkazuUPDATEneboINSERT, 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.
Související obsah
- sp_cursoropen (Transact-SQL)
- sp_cursorfetch (Transact-SQL)
- uložené procedury systému (Transact-SQL)