Funkcia načítania identifikačných hodnôt v SQL SERVER 2000 V SQL Server 2000 je stĺpec identity definovaný pomocou IDENTITY a nasledujúce súvisí so získaním hodnoty identity posledného vloženého záznamu
Príklad ukázania funkcie vypnutia
V SQL Serveri môžete použiť SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() na získanie hodnoty posledného vloženého záznamu a rozdiel medzi nimi je: SCOPE_IDENTITY() vráti poslednú hodnotu IDENTITY vloženú do stĺpca IDENTITY v rovnakom rozsahu. Scope je modul – uložené procedúry, spúšťače, funkcie
Čísla alebo dávky. Preto, ak sú dva výroky v rovnakej uloženej procedúre, funkcii alebo dávke, sú v rovnakom rozsahu. @@IDENTITY Vráti poslednú identifikačnú hodnotu generovanú vo všetkých tabuľkách aktuálnej relácie IDENT_CURRENT() vracia poslednú identifikačnú hodnotu generovanú pre špecifikovanú tabuľku v ľubovoľnej relácii a v akomkoľvek rozsahu Tu je príklad, ktorý ilustruje ich rozdiely
-- a) Ukážkový kód -- =========================================== -- Vytvoriť testovaciu tabuľku -- =========================================== POUŽÍVAJTE tempdb CHOĎ
VYTVORIŤ TABUĽKU t1(id int IDENTITY,col int) VLOŽIŤ t1 VYBRAŤ 1 ZJEDNOTENIE VŠETKÝCH VYBRANÝCH 2 CREATE TABLE t2(id int IDENTITY,col int) CHOĎ
VYTVORIŤ TRIGGER TR_insert_t2 NA T2 PRE VLOŽENIE AS VLOŽIŤ t1 VYBRAŤ 3 CHOĎ
-- =========================================== -- Otestovať tri funkcie: 1 -- =========================================== VLOŽTE T2 HODNOTY(1) SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Pre t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Pre t2]=IDENT_CURRENT(N't2')
/*--Výsledok SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pre t1 IDENT_CURRENT() Pre t2 ------------------ ------------ -------------------------- ----------------------- 1 3 3 1
(Počet ovplyvnených riadkov je 1 riadok) --*/ CHOĎ
-- =========================================== -- Otestovať tri funkcie: 2 -- =========================================== VLOŽTE T1 HODNOTY(10) SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Pre t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Pre t2]=IDENT_CURRENT(N't2')
/*--Výsledok SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pre t1 IDENT_CURRENT() Pre t2 ------------------ ------------ -------------------------- ----------------------- 4 4 4 1
(Počet ovplyvnených riadkov je 1 riadok) --*/ CHOĎ
-- =========================================== -- Otestovať tri funkcie: 3 -- ** Otvoriť nové spojenie a vykonať nasledujúci kód ** -- =========================================== SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Pre t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Pre t2]=IDENT_CURRENT(N't2')
/*--Výsledok SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pre t1 IDENT_CURRENT() Pre t2 ------------------ ------------ -------------------------- ----------------------- NULL NULL 4 &n
--=========================================== -- Vymazať testovacie prostredie -- =========================================== DROP TABLE t1,t2
-- b) Popis výsledkov kódu Ako môžete vidieť z vyššie uvedeného kódu: IDENT_CURRENT() vždy vráti poslednú identifikovanú hodnotu vloženú v zadanej tabuľke @@IDENTITY Vráti identitnú hodnotu aktuálnej relácie, či už v rovnakom rozsahu alebo nie, v testoch 1 a 2 je vidieť, že vracia identitnú hodnotu vloženého záznamu v triggeri a v
V teste 3 sa NULL vráti, pretože v aktuálnej relácii nie je vložený záznam SCOPE_IDENTITY() vráti identifikačnú hodnotu rovnakého rozsahu ako aktuálna relácia, takže v teste 1, 2 vráti hodnotu, ktorá nie je ovplyvnená spúšťačom, a v teste 3, pretože aktuálna relácia nie je interpolovaná
record, takže vráti NULL
|