Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 11405|Atsakyti: 0

[Patarimai] sql gauna pirminio rakto reikšmę laukiant INSERT

[Kopijuoti nuorodą]
Paskelbta 2015-05-05 17:35:51 | | |

Identifikavimo reikšmės gavimo funkcija SQL SERVER 2000     
  SQL Server 2000 tapatybės stulpelis apibrėžiamas pagal IDENTITY, o toliau nurodyti dalykai yra susiję su paskutinio įterpto įrašo tapatybės reikšmės gavimu   
   
  Išjungimo funkcijos pavyzdys     
   
          SQL serveryje galite naudoti SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT(), kad gautumėte paskutinio įterpto įrašo reikšmę, o skirtumas tarp jų yra:   
  SCOPE_IDENTITY() grąžina paskutinę IDENTITY reikšmę, įterptą į tos pačios aprėpties stulpelį IDENTITY. Taikymo sritis yra modulis - saugomos procedūros, trigeriai, funkcijos   
   
  Skaičiai arba partijos. Todėl, jei du sakiniai yra toje pačioje saugomoje procedūroje, funkcijoje ar pakete, jie yra toje pačioje aprėptyje.   
  @@IDENTITY Pateikia paskutinę identifikavimo reikšmę, sugeneruotą visose dabartinio seanso lentelėse   
  IDENT_CURRENT() grąžina paskutinę nurodytos lentelės identifikavimo reikšmę, sugeneruotą bet kuriame seanse ir bet kurioje aprėptyje   
  Štai pavyzdys, iliustruojantis jų skirtumus     
   
  -- a) Pavyzdžio kodas     
  --   ===========================================   
  -- Sukurkite bandomąją lentelę   
  --   ===========================================   
  NAUDOKITE tempdb   
  EITI   
   
  CREATE TABLE t1(id int IDENTITY,col int)   
  INSERT t1 SELECT 1   
  SĄJUNGA VISI PASIRINKTI 2   
  CREATE TABLE t2(id int IDENTITY,col int)   
  EITI   
   
  SUKURKITE PALEIDIKLIO TR_insert_t2 T2   
  ĮTERPIMUI   
  KAIP   
          INSERT t1 SELECT 3   
  EITI     
   
  --   ===========================================   
  -- Išbandykite tris funkcijas: 1   
  --   ===========================================   
  ĮRAŠYTI T2 REIKŠMES [1]   
  PASIRINKITE [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() T2]=IDENT_CURRENT(N't2')   
   
  /*--Rezultatas   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() t1 IDENT_CURRENT() t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  1                                     3                         3                                                     1   
   
  (Paveiktų eilučių skaičius yra 1 eilutė)   
  --*/   
  EITI   
   
  --   ===========================================   
  -- Išbandykite tris funkcijas: 2   
  --   ===========================================   
  ĮRAŠYTI T1 REIKŠMES [10]   
  PASIRINKITE [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() T2]=IDENT_CURRENT(N't2')   
   
  /*--Rezultatas   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() t1 IDENT_CURRENT() t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  4                                     4                         4                                                     1   
   
  (Paveiktų eilučių skaičius yra 1 eilutė)   
  --*/   
  EITI   
   
  --   ===========================================   
  -- Išbandykite tris funkcijas: 3   
  -- ** Atidarykite naują ryšį ir vykdykite šį kodą **   
  --   ===========================================   
  PASIRINKITE [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() T2]=IDENT_CURRENT(N't2')   
   
  /*--Rezultatas   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() t1 IDENT_CURRENT() t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  NULL NULL 4 &n     
   
  --===========================================   
  -- Ištrinkite testavimo aplinką   
  --   ===========================================   
  NULEIDŽIAMAS STALAS T1,T2     
   
  -- b) Kodo rezultato aprašymas     
  Kaip matote iš aukščiau pateikto kodo:   
  IDENT_CURRENT() visada grąžina paskutinę identifikuotą reikšmę, įterptą į nurodytą lentelę   
  @@IDENTITY Grąžina dabartinio seanso tapatybės reikšmę, nesvarbu, ar ji yra toje pačioje aprėptyje, ar ne, atliekant 1 ir 2 bandymus galima pastebėti, kad ji grąžina įterpto įrašo tapatybės reikšmę paleidiklyje, o   
   
  3 bandyme grąžinama NULL, nes dabartiniame seanse nėra įterpimo įrašo   
  SCOPE_IDENTITY() grąžina tos pačios dabartinio seanso aprėpties identifikavimo reikšmę, todėl atliekant 1, 2 bandymus grąžinama reikšmė, kuriai paleidiklis neturi įtakos, o 3 teste, nes dabartinis seansas nėra interpoliuojamas   
   
  įrašą, todėl grąžina NULL





Ankstesnis:Kodėl visi ėjo į gegužės pirmosios šventę?
Kitą:Kuo skiriasi SCOPE_IDENTITY() rašoma prieš ir po t-sql?
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com