Tunnistusarvojen hakutoiminto SQL SERVER 2000:ssa SQL Server 2000:ssa identiteettisarake määritellään IDENTITY-muodossa, ja seuraava asia liittyy viimeksi lisätyn tietueen identiteettiarvon saamiseen
Esimerkki pois-funktion havainnollistuksesta
SQL Serverissä voit käyttää SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() saadaksesi viimeksi lisätyn tietueen arvon, ja niiden ero on: SCOPE_IDENTITY() palauttaa viimeisen IDENTITY-arvon, joka on lisätty IDENTITY-sarakkeeseen, samassa sulatusalueessa. Scope on moduuli – tallennetut proseduurit, triggerit, funktiot
Määrät vai erät. Siksi, jos kaksi lausetta ovat samassa tallennetussa proseduurissa, funktiossa tai erässä, ne kuuluvat samaan laajuuteen. @@IDENTITY Palauttaa viimeisimmän tunnistearvon, joka on luotu kaikissa tauluissa nykyisessä istunnossa IDENT_CURRENT() palauttaa viimeisen tunnistearvon, joka on luotu määritetylle taululle missä tahansa istunnossa ja missä tahansa laajuudessa Tässä on esimerkki, joka havainnollistaa heidän erojaan
-- a) Esimerkkikoodi -- =========================================== -- Luo testitaulukko -- =========================================== KÄYTÄ tempdb MENE
LUO TAULU t1(id int IDENTITY, col int) LISÄÄ t1 VALITSE 1 UNION ALL SELECT 2 LUO TAULU t2(id int IDENTITY, col int) MENE
LUO TRIGGER TR_insert_t2 T2:SSA INSERTILLE AS LISÄÄ T1 VALITSE 3 MENE
-- =========================================== -- Testaa kolme toimintoa: 1 -- =========================================== LISÄÄ t2-ARVOT(1) VALITSE [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() For t2]=IDENT_CURRENT(N't2')
/*--Tulos SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() T1:lle IDENT_CURRENT() T2:lle ------------------ ------------ -------------------------- ----------------------- 1 3 3 1
(Rivien määrä, johon vaikuttetaan, on 1 rivi) --*/ MENE
-- =========================================== -- Testaa kolme toimintoa: 2 -- =========================================== LISÄÄ t1-ARVOT(10) VALITSE [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() For t2]=IDENT_CURRENT(N't2')
/*--Tulos SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() T1:lle IDENT_CURRENT() T2:lle ------------------ ------------ -------------------------- ----------------------- 4 4 4 1
(Rivien määrä, johon vaikuttetaan, on 1 rivi) --*/ MENE
-- =========================================== -- Testaa kolme toimintoa: 3 -- ** Avaa uusi yhteys ja suorita seuraava koodi ** -- =========================================== VALITSE [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() For t2]=IDENT_CURRENT(N't2')
/*--Tulos SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() T1:lle IDENT_CURRENT() T2:lle ------------------ ------------ -------------------------- ----------------------- NULL NULL 4 &n
--=========================================== -- Poista testiympäristö -- =========================================== PUDOTA TAULU t1, t2
-- b) Koodituloksen kuvaus Kuten yllä olevasta koodista näkyy: IDENT_CURRENT() palauttaa aina viimeksi tunnistetun arvon, joka lisätään määritettyyn taulukkoon @@IDENTITY Palauttaa nykyisen istunnon identiteettiarvon, olipa kyse samasta aiheesta tai ei, testeissä 1 ja 2 nähdään, että se palauttaa lisätyn tietueen identiteettiarvon laukaisimessa, ja
Testissä 3 NULL palautetaan, koska nykyisessä istunnossa ei ole insertion-tietuetta SCOPE_IDENTITY() palauttaa saman nykyisen istunnon laajuuden tunnistearvon, joten testeissä 1, 2 se palauttaa arvon, johon laukaisija ei vaikuta, ja testissä 3, koska nykyinen istunto ei ole interpoloitu
record, joten se palauttaa NULLin
|