Identifikācijas vērtības iegūšanas funkcija programmā SQL SERVER 2000 Programmā SQL Server 2000 kolonna identitāte ir definēta ar IDENTITY, un tālāk norādītais ir saistīts ar pēdējā ievietotā ieraksta identitātes vērtības iegūšanu
Izslēgtas funkcijas piemērs
Programmā SQL Server varat izmantot SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT(), lai iegūtu pēdējā ievietotā ieraksta vērtību, un atšķirība starp tām ir: SCOPE_IDENTITY() atgriež pēdējo IDENTITY vērtību, kas ievietota kolonnā IDENTITY tajā pašā tvērumā. Darbības joma ir modulis - saglabātās procedūras, trigeri, funkcijas
Skaitļi vai partijas. Tāpēc, ja divi priekšraksti ir vienā saglabātajā procedūrā, funkcijā vai paketē, tie ir vienā tvērumā. @@IDENTITY Atgriež pēdējo identifikācijas vērtību, kas ģenerēta visās pašreizējās sesijas tabulās IDENT_CURRENT() atgriež pēdējo identifikācijas vērtību, kas ģenerēta norādītajai tabulai jebkurā sesijā un tvērumā Šeit ir piemērs, lai ilustrētu to atšķirības
-- a) Parauga kods -- =========================================== -- Testa tabulas izveide -- =========================================== IZMANTOJIET tempdb IET
CREATE TABLE t1(id int IDENTITY,col int) IEVIETOT T1 ATLASĪT 1 SAVIENĪBA VISI ATLASĪT 2 CREATE TABLE t2(id int IDENTITY,col int) IET
TRIGERA TR_insert_t2 IZVEIDE T2 IEVIETOŠANAI KĀ IEVIETOT T1 IZVĒLIETIES 3 IET
-- =========================================== - Pārbaudiet trīs funkcijas: 1 -- =========================================== IEVIETOJIET T2 VĒRTĪBAS [1] ATLASIET [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() T1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() T2]=IDENT_CURRENT(N't2')
/*--Rezultāts SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() T1 IDENT_CURRENT() T2 ------------------ ------------ -------------------------- ----------------------- 1 3 3 1
(Ietekmēto rindu skaits ir 1 rinda) --*/ IET
-- =========================================== - Pārbaudiet trīs funkcijas: 2 -- =========================================== IEVIETOJIET T1 VĒRTĪBAS [10] ATLASIET [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() T1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() T2]=IDENT_CURRENT(N't2')
/*--Rezultāts SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() T1 IDENT_CURRENT() T2 ------------------ ------------ -------------------------- ----------------------- 4 4 4 1
(Ietekmēto rindu skaits ir 1 rinda) --*/ IET
-- =========================================== - Pārbaudiet trīs funkcijas: 3 -- ** Atveriet jaunu savienojumu un izpildiet šādu kodu ** -- =========================================== ATLASIET [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() T1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() T2]=IDENT_CURRENT(N't2')
/*--Rezultāts SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() T1 IDENT_CURRENT() T2 ------------------ ------------ -------------------------- ----------------------- NULL NULL 4 &n
--=========================================== -- Dzēst testa vidi -- =========================================== NOLAIŽAMĀ TABULA T1,T2
-- b) Koda rezultāta apraksts Kā redzat no iepriekš minētā koda: IDENT_CURRENT() vienmēr atgriež pēdējo identificēto vērtību, kas ievietota norādītajā tabulā @@IDENTITY Atgriež pašreizējās sesijas identitātes vērtību neatkarīgi no tā, vai tā ir tajā pašā tvērumā vai nē, 1. un 2. testā var redzēt, ka tā atgriež ievietotā ieraksta identitātes vērtību trigerā, un
3. testā NULL tiek atgriezts, jo pašreizējā sesijā nav ievietošanas ieraksta SCOPE_IDENTITY() atgriež tā paša pašreizējās sesijas tvēruma identifikācijas vērtību, tāpēc 1. un 2. testā tiek atgriezta vērtība, kuru neietekmē trigeris, un 3. testā, jo pašreizējā sesija netiek interpolēta
ierakstu, tāpēc tiek atgriezta vērtība NULL
|