Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 11405|Válasz: 0

[Tippek] a sql az elsődleges kulcsértéket kapja meg, miután megvárta az INSERT-et

[Linket másol]
Közzétéve 2015. 05. 05. 17:35:51 | | |

Azonosító érték előhívó függvény SQL SERVER 2000-ben     
  Az SQL Server 2000-ben az identitás oszlopot az IDENTITY definiálja, és a következő kapcsolódik az utoljára beillesztett rekord identitásértékének megszerzéséhez   
   
  Példa az off funkciójára     
   
          SQL Serverben az SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() billentyűkkel megkaphatod az utolsó beillesztett rekord értékét, és ezek közötti különbség a következő:   
  SCOPE_IDENTITY() adja vissza az utolsó IDENTITY értéket, amelyet ugyanabban a scope-ban az IDENTITY oszlopba helyeztek be. A scope egy modul – tárolt eljárások, triggerek, függvények   
   
  Számok vagy adagok. Ezért, ha két állítás ugyanabban a tárolt eljárásban, függvényben vagy kötetben van, ugyanabban a hatókörben vannak.   
  @@IDENTITY Visszaadja az összes táblában generált utolsó azonosító értéket a jelenlegi ülés során   
  IDENT_CURRENT() visszaadja az utolsó azonosító értéket, amelyet a megadott táblához bármely ülésen és bármely hatókörben generáltak   
  Íme egy példa, hogy jól szemléltessem a különbségeiket     
   
  -- a) Mintakód     
  --   ===========================================   
  -- Készíts teszttáblát   
  --   ===========================================   
  HASZNÁLD tempdb-t   
  MENJ   
   
  CREATE TABLE t1(id int IDENTITY,col int)   
  INSERT t1 SELECT 1   
  UNION ALL SELECT 2   
  CREATE TABLE t2(id int IDENTITY,col int)   
  MENJ   
   
  CREATE TRIGGER TR_insert_t2 T2-N   
  BEILLESZTÉSHEZ   
  MINT   
          BESZEKELNI T1 SELECT 3   
  MENJ     
   
  --   ===========================================   
  -- Három funkciót tesztelj: 1   
  --   ===========================================   
  BESZÚRD T2 ÉRTÉKEKET(1)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() A t2 esetén]=IDENT_CURRENT(N't2')   
   
  /*--Eredmény   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() A t1 IDENT_CURRENT() A t2 esetén                                         
  ------------------   ------------   --------------------------   -----------------------   
  1                                     3                         3                                                     1   
   
  (Az érintett sorok száma 1 sor)   
  --*/   
  MENJ   
   
  --   ===========================================   
  -- Három funkciót tesztelj: 2   
  --   ===========================================   
  BEHELYEZZÜNK T1 ÉRTÉKEKET(10)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() A t2 esetén]=IDENT_CURRENT(N't2')   
   
  /*--Eredmény   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() A t1 IDENT_CURRENT() A t2 esetén                                         
  ------------------   ------------   --------------------------   -----------------------   
  4                                     4                         4                                                     1   
   
  (Az érintett sorok száma 1 sor)   
  --*/   
  MENJ   
   
  --   ===========================================   
  -- Három funkciót tesztelj: 3   
  -- ** Nyiss új kapcsolatot, és hajtsd végre a következő kódot **   
  --   ===========================================   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() A t2 esetén]=IDENT_CURRENT(N't2')   
   
  /*--Eredmény   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() A t1 IDENT_CURRENT() A t2 esetén                                         
  ------------------   ------------   --------------------------   -----------------------   
  NULL NULL 4 &n     
   
  --===========================================   
  -- Töröld a tesztkörnyezetet   
  --   ===========================================   
  DOBD LE TÁBLÁZATOT T1, t2     
   
  -- b) Kód eredményleírás     
  Ahogy a fenti kódból is látható:   
  IDENT_CURRENT() mindig a megadott táblában beillesztett utoljára azonosított értéket adja vissza   
  @@IDENTITY A jelenlegi munkafolyamat identitásértékét adja vissza, akár ugyanabban a hatókörben, akár nem, az 1. és 2. tesztben látható, hogy a beillesztett rekord identitásának értékét adja vissza a triggerben, és a   
   
  A 3. tesztben a NULL visszatér, mert a jelenlegi ülésben nincs beillesztési rekord   
  SCOPE_IDENTITY() adja vissza ugyanennek a kiemelkedőségnek az azonosító értékét a jelenlegi ülésszak esetében, tehát az 1, 2. tesztben azt az értéket adja vissza, amelyet a trigger nem érint, a 3. tesztben pedig azért, mert az aktuális ülés nincs interpolálva   
   
  rekord, így a NULL visszaadja





Előző:Miért ment mindenki a május elsejére ünnepre?
Következő:Mi a különbség aközött, hogy a SCOPE_IDENTITY() t-SQL-ben előtte és utána írják?
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com