Forrás: Internet Szerző: Ismeretlen
- Adatbázisok és táblák létrehozása
létrehozza MyDataBase adatbázist
használd a MyDataBase-et
create table mytable
id int identity(1,1),
Név Varchar(20)
)
--Futtatjuk ezt az SQL-t, hogy megtudjuk az öninkrementális oszlop értékét, amely megfelel az imént beillesztett rekordnak
beillesztés a mytable értékekbe ('Li Si')
Válassz @@identity
2. A három módszer összehasonlítása
Az SQL Server 2000-ben három hasonló funkció van: SCOPE_IDENTITY, IDENT_CURRENT és @@IDENTITY, amelyek mindegyike az IDENTITY oszlopba beillesztett értékeket adja.
IDENT_CURRENT Visszaadja az utolsó azonosító értéket, amelyet egy adott tábla számára generált bármely ülésen és bármely hatókörben. IDENT_CURRENT Nem korlátozott a hatókör és az ülés, hanem egy meghatározott táblázat. IDENT_CURRENT Visszaadja egy adott tábla által generált értéket bármely ülésen és hatókörben.
@@IDENTITY Visszaadja az utolsó azonosító értéket, amely bármely táblára generált az aktuális ülésszak minden hatókörében.
SCOPE_IDENTITY Visszaadja az utolsó azonosított értéket, amelyet az aktuális játékidőre generáltak, valamint bármely táblázatot a jelenlegi hatókörben
SCOPE_IDENTITY és @@IDENTITY visszaadják az utolsó azonosító értéket, amely bármely táblázatban generált a jelenlegi ülésen. Azonban SCOPE_IDENTITY csak az aktuális scope-ba beillesztett értékeket adja; @@IDENTITY Nem korlátozódik egy konkrét hatókörre.
Például két táblázat van, T1 és T2, amelyeken egy INSERT trigger van definiálva. Amikor egy sort behelyezünk a T1-be, a trigger aktiválódik, és egy sor kerül be a T2-be. Ez a példa két távcsőt illusztrál: az egyik T1-en, egyet pedig T2-en a trigger hatására.
Feltételezve, hogy mind T1, mind T2 rendelkezik IDENTITY oszlopokkal, a @@IDENTITY és a SCOPE_IDENTITY eltérő értékeket adnak vissza a INSERT utasítás végén T1-en.
@@IDENTITY Visszaadja az utolsó IDENTITY oszlopértéket, amelyet bármely hatókörbe beillesztettek az aktuális ülésszakban, ami a T2-ben van behelyezve.
SCOPE_IDENTITY() adja vissza a T1-be beillesztett IDENTITY értéket, ami az utolsó INSERT, amely ugyanabban a scope-ban történt. Ha az SCOPE_IDENTITY() függvényt az identitásoszlop beillesztési utasítása előtt hívjuk meg, akkor a függvény NULL értéket ad vissza.
A IDENT_CURRENT('T1') és IDENT_CURRENT('T2') által visszaadott értékek a két tábla utolsó öninkrementális értékei.
AJQC kísérlete: (40 helyi szál, 40+40 távoli szál egyszerre tesztel, 1200W sor beillesztése), a következtetés a következmény:
1. Tipikus kaszkád alkalmazásokban. @@IDENTITY nem használható, és párhuzamos ütközések is előfordulhatnak, ha az 1W többsoros a CII850, 256M SD gépeken. P42.8C és 512M DDR esetén egyidejű konfliktus van, amikor csak 6000 vonalnál több van.
2.SCOPE_IDENTITY() teljesen megbízható, használható a tárolási folyamatban, még triggereket sem kell építeni, és nincsenek egyidejű konfliktusok
SELECT IDENT_CURRENT('TableName') - Visszaadja a megadott táblában generált utolsó címkeértéket
SELECT IDENT_INCR('TableName') – adja vissza a megadott mező increment értékét a megadott táblához
SELECT IDENT_SEED('TableName') – adja vissza a megadott tábla megjelölt mezőmag értékét
Visszaadja az utolsó beillesztett rekord automatikus számát
SELECT IDENT_CURRENT('TableName')
Térj vissza a következő automatikus számhoz:
SELECT IDENT_CURRENT('TableName')+(SELECT IDENT_INCR('TableName'))
SELECT @@IDENTITY - Visszaadja az utolsó jelölt értéket, amelyet az aktuális ülésszak összes táblájában generáltak
|