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).
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
, NEXT
ani 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
, REFRESH
nebo LOCK
optype.
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 INSERT
optype. Ř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
, REFRESH
nebo 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éhoRELATIVE
,NEXT
aniPREVIOUS
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í pozice1
, bez vrácení chyby. Po provedeníSETPOSITION
zůstane pozice platná až do další operacesp_cursorfetch
, operaceFETCH
T-SQL nebo operacesp_cursor
SETPOSITION
pomocí stejného kurzoru. Následující operacesp_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
,DELETE
neboLOCK
, 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_cursor
SETPOSITION
operace se provede na stejném kurzoru.
SETPOSITION
lze propojit pomocí klauzule OR
s REFRESH
, UPDATE
, DELETE
nebo 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
UPDATE
neboINSERT
nebo použití více parametrů k odeslání částí příkazuUPDATE
neboINSERT
, 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)