See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 11405|Vastuse: 0

[Nõuanded] sql saab primaarvõtme väärtuse pärast INSERT ootamist

[Kopeeri link]
Postitatud 05.05.2015 17:35:51 | | |

Identifitseerimisväärtuse hankimise funktsioon SQL SERVER 2000-s     
  SQL Server 2000-s määratletakse identiteediveerg IDENTITY abil ning järgmine on seotud viimase sisestatud kirje identiteediväärtuse saamisega   
   
  Näide funktsioonist välja     
   
          SQL Serveris saad kasutada SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() viimati sisestatud kirje väärtuse saamiseks ning nende erinevus on:   
  SCOPE_IDENTITY() tagastab viimase IDENTITY-väärtuse, mis on lisatud IDENTITY-veeru sisse samas ulatuses. Scope on moodul – salvestatud protseduurid, päästikud, funktsioonid   
   
  Numbrid või partiid. Seega, kui kaks väidet on samas salvestatud protseduuris, funktsioonis või partiis, kuuluvad need samasse ulatusse.   
  @@IDENTITY Tagastab viimase identifitseerimisväärtuse, mis genereeriti kõigis tabelites käesoleval sessioonil   
  IDENT_CURRENT() tagastab viimase identifitseerimisväärtuse, mis genereeritakse määratud tabeli jaoks igas sessioonis ja igas ulatuses   
  Siin on näide, mis illustreerib nende erinevusi     
   
  -- a) Näidiskood     
  --   ===========================================   
  -- Loo testtabel   
  --   ===========================================   
  KASUTA tempdb   
  MINE   
   
  LOO TABEL t1(id int IDENTITY, col int)   
  INSERT t1 SELECT 1   
  UNION KÕIK SELECT 2   
  LOO TABEL t2(id int IDENTITY, col int)   
  MINE   
   
  LOO TRIGGER TR_insert_t2 T2-L   
  FOR   INSERT   
  KUI   
          SISESTA T1 VALIK 3   
  MINE     
   
  --   ===========================================   
  -- Testi kolme funktsiooni: 1   
  --   ===========================================   
  SISESTA T2 VÄÄRTUSED(1)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Kui t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() T2 jaoks]=IDENT_CURRENT(N't2')   
   
  /*--Tulemus   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() T1 jaoks IDENT_CURRENT() T2 jaoks                                         
  ------------------   ------------   --------------------------   -----------------------   
  1                                     3                         3                                                     1   
   
  (Mõjutatud ridade arv on 1 rida)   
  --*/   
  MINE   
   
  --   ===========================================   
  -- Testi kolme funktsiooni: 2   
  --   ===========================================   
  SISESTA t1 VÄÄRTUSED(10)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Kui t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() T2 jaoks]=IDENT_CURRENT(N't2')   
   
  /*--Tulemus   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() T1 jaoks IDENT_CURRENT() T2 jaoks                                         
  ------------------   ------------   --------------------------   -----------------------   
  4                                     4                         4                                                     1   
   
  (Mõjutatud ridade arv on 1 rida)   
  --*/   
  MINE   
   
  --   ===========================================   
  -- Testi kolme funktsiooni: 3   
  -- ** Ava uus ühendus ja käivita järgmine kood **   
  --   ===========================================   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Kui t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() T2 jaoks]=IDENT_CURRENT(N't2')   
   
  /*--Tulemus   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() T1 jaoks IDENT_CURRENT() T2 jaoks                                         
  ------------------   ------------   --------------------------   -----------------------   
  NULL NULL 4 &n     
   
  --===========================================   
  -- Kustuta testkeskkond   
  --   ===========================================   
  DROP TABEL t1,t2     
   
  -- b) Koodi tulemuse kirjeldus     
  Nagu ülaltoodud koodist näha:   
  IDENT_CURRENT() tagastab alati viimati tuvastatud väärtuse, mis sisestati määratud tabelisse   
  @@IDENTITY Tagastab praeguse sessiooni identiteediväärtuse, olenemata sellest, kas see on samas ulatuses või mitte, testides 1 ja 2 on näha, et see tagastab käivitajasse sisestatud kirje identiteediväärtuse, ja   
   
  Testis 3 tagastatakse NULL, kuna praeguses sessioonis puudub sisestuskirje   
  SCOPE_IDENTITY() tagastab sama praeguse sessiooni ulatuse identifitseerimisväärtuse, seega testides 1, 2 tagastatakse väärtus, mida päästik ei mõjuta, ja testis 3, sest praegust sessiooni ei interpoleerita   
   
  rekord, seega tagastatakse NULL





Eelmine:Miks kõik käisid mai pühal?
Järgmine:Mis on sellel, kas SCOPE_IDENTITY() kirjutatakse enne ja pärast t-SQL-is?
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com