Windows - Identity funkciók az SQL szerverben

forráskód letöltése
Cikkünkben összefoglaljuk azokat a lehetőségeket, amelyeket az SQL szerver nyújt a rekordok egyedi azonosítását illetően. Az IDENTITY függvények, változók, kapcsolók ismertetése. Segítségükkel biztosított a rekordok egyedi azonosítása. Bizonyos alkalmazásokban elengedhetetlen használatuk, például újonnan felvett rekordok azonosítása esetén.
IDENTITY tulajdonság
Az SQL szerver tábláiban ajánlott használnunk az azonosító, IDENTITY tulajdonságot. Segítségével a tábla rekordjait egyedileg tudjuk azonosítani. Ez a gyakorlatban azt jelenti, hogy új rekord felvételekor az IDENTITY beállításnak megfelelően az adott kulcs egyedi értéket kap.
CREATE TABLE uj_alkalmazottak
(
id_num int IDENTITY(1,1),
vezeteknev varchar (30),
minit char(1),
keresztnev varchar(20)
)
A példa mutatja, hogy hogyan adhatunk meg tábladefinícióban azonosító tulajdonságot. Ebben az esetben két paramétere van az IDENTITY tulajdonságnak:
  • Seed: Kezdeti érték. Az első rekord ezt az értéket veszi fel
  • Increment: A növekedés értéke. Minden újabb rekord az itt meghatározott értékkel növelt azonosítót kapja meg.
Alapértelmezésben, ha nem adjuk meg, akkor az 1-1 paraméterértékek szerint készül el a tábla. Az első id_num rekord tehát 1-es, a következő 2-es értékű lesz.
SET IDENTITY_INSERT
IDENTITY oszlop használata esetén a rekord azonosító értékét új rekord felvételekor a szerver tölti ki, nekünk nincs módunk arra, hogy beavatkozzunk. Ha mégis szükségünk van arra, hogy egy rekord azonosítóját magunk határozzuk meg, vagy módosítsunk rajta, akkor erre használhatjuk a
SET IDENTITY_INSERT ON
kapcsolót. Segítségével kikapcsolhatjuk az azonosító tulajdonság figyelembe vételét. Mellékelt példánkban egy termékeket tartalmazó táblát hozunk létre, amelybe sorokat veszünk fel, majd egy közbülső sort törlünk. Megpróbáljuk először pótolni a foghíjas azonosítót, de mivel nem engedi a szerver, ezért ki kell kapcsolnunk az azonosító tulajdonság kezelését és ezután már sikeres lesz az INSERT.
IDENT_SEED, IDENT_INCREMENT függvények
Ez a két függvény egy tábla vagy nézetnév paraméterrel rendelkezik és visszaadja az adott, pl. tábla azonosítójának kezdő értékét, vagy növekedési értékét – az adott függvénytől függően. Mellékelt példánkban a pubs adatbázis valamennyi tábláját kilistázzuk, amelyeknek azonosító mezőjük van, és megjelenítjük a megfelelő paramétereket.
@@IDENTITY
Visszaadja az azonosító értéket. INSERT, vagy SELECT INTO utasítással együtt használva segítségével megtudhatjuk, hogy milyen azonosító értéket kapott az új rekord.
INSERT INTO munka (munka_leiras,min_fizetes,max_fizetes)
VALUES ('Kapcsolattartó',80000,125000)
SELECT @@IDENTITY AS 'Identity'
Az itt látható módon adja vissza a munkákat tartalmazó tábla a legfrissebb rekord azonosítóját.
SCOPE_IDENTITY()
Ennek az SQL változónak a működése hasonló a @@IDENTITY-hez, csupán abban különbözik, hogy a SCOPE_IDENTITY a saját "hatásköréhez" tartozó azonosítót adja vissza.
Például két táblánk van, T1 és T2 és a T1-en egy INSERT trigger van beállítva. Amikor egy sor beszúrásra kerül a T1-be, a trigger feléled, és beszúr egy rekordot a T2-be. E szerint a forgatókönyv szerint két hatáskör van: a T1-es INSERT és a T2-es INSERT, a trigger eredménye.
Feltéve, ha mindkét táblának van IDENTITY oszlopa, a @@IDENTITY és a SCOPE_IDENTITY más értéket fog visszaadni a kezdeményezett T1-es INSERT után.
A @@IDENTITY az utolsó IDENTITY oszlop értéket adja vissza, ami beszúrásra került bármely hatáskörben, az aktuális viszonyban, ami a T2 megfelelő értéke lesz. A SCOPE_IDENTITY pedig a T1 azonosítóját fogja visszaadni, mivel neki csak arra terjed ki a hatásköre.
IDENTITY függvény
A SELECT INTO utasításban használatos az IDENTITY nevű függvény, ami a megadott paraméterei (adattípus, kezdőérték, növekmény) alapján generál egy azonosító értéket. Utána az AS kulcsszó segítségével tudunk oszlopnevet definiálni az újonnan létrejött azonosító oszlopnak. Ezt a funkciót akkor használhatjuk, amikor egy lekérdezés adataiból akarunk új táblát létrehozni, és azt szeretnénk, hogy ez az új tábla rendelkezzen azonosító mezővel is.
SELECT alkalmazott_id AS alkalmazott _num, 
vezeteknev AS vezetek, 
keresztnev AS kereszt, 
IDENTITY(smallint, 100, 1) AS munka_num, 
munka_szint
INTO alkalmazottak
FROM alkalmazott
A példa illusztrálja az IDENTITY függvény használatát.