Funkce načítání identifikačních hodnot v SQL SERVER 2000 V SQL Server 2000 je sloupec identity definován pomocí IDENTITY a následující se týká získání hodnoty identity posledního vloženého záznamu
Příklad funkce vypnuté
V SQL Serveru můžete použít SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() k získání hodnoty posledního vloženého záznamu, přičemž rozdíl mezi nimi je: SCOPE_IDENTITY() vrátí poslední hodnotu IDENTITY vloženou do sloupce IDENTITY ve stejném rozsahu. Scope je modul – uložené procedury, spouštěče, funkce
Čísla nebo šarže. Pokud jsou tedy dva výroky ve stejné uložené procedurě, funkci nebo dávce, jsou ve stejném rozsahu. @@IDENTITY Vrátí poslední identifikační hodnotu generovanou ve všech tabulkách aktuální relace IDENT_CURRENT() vrací poslední identifikační hodnotu generovanou pro specifikovanou tabulku v jakékoli relaci a v jakémkoli rozsahu Tady je příklad, který ilustruje jejich rozdíly
-- a) Ukázkový kód -- =========================================== -- Vytvořit testovací tabulku -- =========================================== POUŽÍVEJTE tempdb JDI
VYTVOŘIT TABULKU t1(id int IDENTITY,col int) VLOŽTE T1 VYBERTE 1 SVAZ VŠECH VYBRANÝCH 2 CREATE TABLE t2(id int IDENTITY,col int) JDI
VYTVOŘTE TR_insert_t2 TRIGGERU NA T2 PRO VLOŽENÍ AS VLOŽTE T1 VYBERTE 3 JDI
-- =========================================== -- Otestujte tři funkce: 1 -- =========================================== VLOŽTE T2 HODNOTY(1) SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Pro t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Pro t2]=IDENT_CURRENT(N't2')
/*--Výsledek SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pro t1 IDENT_CURRENT() Pro t2 ------------------ ------------ -------------------------- ----------------------- 1 3 3 1
(Počet dotčených řádků je 1 řádek) --*/ JDI
-- =========================================== -- Otestujte tři funkce: 2 -- =========================================== VLOŽTE T1 HODNOTY(10) SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Pro t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Pro t2]=IDENT_CURRENT(N't2')
/*--Výsledek SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pro t1 IDENT_CURRENT() Pro t2 ------------------ ------------ -------------------------- ----------------------- 4 4 4 1
(Počet dotčených řádků je 1 řádek) --*/ JDI
-- =========================================== -- Otestujte tři funkce: 3 -- ** Otevřete nové spojení a spusněte následující kód ** -- =========================================== SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Pro t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Pro t2]=IDENT_CURRENT(N't2')
/*--Výsledek SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pro t1 IDENT_CURRENT() Pro t2 ------------------ ------------ -------------------------- ----------------------- NULL NULL 4&n
--=========================================== -- Smazat testovací prostředí -- =========================================== DROP TABLE t1,t2
-- b) Popis výsledků kódu Jak můžete vidět z výše uvedeného kódu: IDENT_CURRENT() vždy vrací poslední identifikovanou hodnotu vloženou do zadané tabulky @@IDENTITY Vrací identitní hodnotu aktuální relace, ať už ve stejném rozsahu nebo ne, v testech 1 a 2 lze vidět, že vrací identitní hodnotu vloženého záznamu v triggeru a v
V testu 3 se NULL vrací, protože v aktuální relaci není vložený záznam SCOPE_IDENTITY() vrací identifikační hodnotu stejného rozsahu aktuální relace, takže v testu 1, 2 vrací hodnotu, která není spouštěčem ovlivněna, a v testu 3, protože aktuální relace není interpolována
record, takže vrací NULL
|