Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 11405|Odgovoriti: 0

[Napitnine] sql dobi primarno vrednost ključa po čakanju na INSERT

[Kopiraj povezavo]
Objavljeno na 5. 05. 2015 17:35:51 | | |

Funkcija pridobivanja identifikacijske vrednosti v SQL SERVER 2000     
  V SQL Server 2000 je stolpec identitete definiran z IDENTITETO, naslednje pa je povezano z iskanjem vrednosti identitete zadnjega vstavljenega zapisa   
   
  Primer ponazoritve funkcije izklopljene     
   
          V SQL Serverju lahko uporabite SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() za pridobitev vrednosti zadnjega vstavljenega zapisa, razlika med njima pa je:   
  SCOPE_IDENTITY() vrne zadnjo vrednost IDENTITY, vstavljeno v stolpec IDENTITY v istem obsegu. Scope je modul – shranjene procedure, sprožilci, funkcije   
   
  Številke ali serije. Torej, če sta dva stavka v isti shranjeni proceduri, funkciji ali paketu, sta v istem obsegu.   
  @@IDENTITY Vrne zadnjo identifikacijsko vrednost, generirano v vseh tabelah v trenutni seji   
  IDENT_CURRENT() vrne zadnjo identifikacijsko vrednost, generirano za določeno tabelo v katerikoli seji in obsegu   
  Tukaj je primer, ki ponazarja njihove razlike     
   
  -- a) Vzorčna koda     
  --   ===========================================   
  -- Ustvarite testno tabelo   
  --   ===========================================   
  UPORABI tempdb   
  POJDI   
   
  USTVARI TABELO t1(id int IDENTITY,col int)   
  VSTAVI t1 IZBERI 1   
  UNIJA ALL SELECT 2   
  CREATE TABLE t2(id int IDENTITY,col int)   
  POJDI   
   
  USTVARI SPROŽILNO TR_insert_t2 NA T2   
  ZA VSTAVLJANJE   
  KOT   
          VSTAVI t1 IZBERI 3   
  POJDI     
   
  --   ===========================================   
  -- Preizkusite tri funkcije: 1   
  --   ===========================================   
  VSTAVI T2 VREDNOSTI(1)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Za t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Za t2]=IDENT_CURRENT(N't2')   
   
  /*--Rezultat   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Za t1 IDENT_CURRENT() Za t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  1                                     3                         3                                                     1   
   
  (Število prizadetih vrstic je 1 vrstica)   
  --*/   
  POJDI   
   
  --   ===========================================   
  -- Preizkusite tri funkcije: 2   
  --   ===========================================   
  VSTAVI T1 VREDNOSTI(10)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Za t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Za t2]=IDENT_CURRENT(N't2')   
   
  /*--Rezultat   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Za t1 IDENT_CURRENT() Za t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  4                                     4                         4                                                     1   
   
  (Število prizadetih vrstic je 1 vrstica)   
  --*/   
  POJDI   
   
  --   ===========================================   
  -- Preizkusite tri funkcije: 3   
  -- ** Odpri novo povezavo in izvede naslednjo kodo **   
  --   ===========================================   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Za t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Za t2]=IDENT_CURRENT(N't2')   
   
  /*--Rezultat   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Za t1 IDENT_CURRENT() Za t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  NULL NULL 4 &n     
   
  --===========================================   
  -- Izbrisati testno okolje   
  --   ===========================================   
  DROP TABLE t1,t2     
   
  -- b) Opis rezultata kode     
  Kot lahko vidite iz zgornje kode:   
  IDENT_CURRENT() vedno vrne zadnjo prepoznano vrednost, vstavljeno v določeno tabelo   
  @@IDENTITY Vrne identitetno vrednost trenutne seje, ne glede na to, ali je v istem obsegu ali ne, v testih 1 in 2 lahko vidimo, da vrne identitetno vrednost vstavljenega zapisa v sprožilcu in v   
   
  V testu 3 se NULL vrne, ker v trenutni seji ni zapisa o vstavljanju   
  SCOPE_IDENTITY() vrne identifikacijsko vrednost istega obsega kot trenutna seja, tako da v testu 1, 2 vrne vrednost, ki ni prizadeta s sprožilcem, v testu 3, ker trenutna seja ni interpolirana   
   
  record, zato vrne NULL





Prejšnji:Zakaj so vsi šli na praznik prvega maja?
Naslednji:Kakšna je razlika med tem, da je SCOPE_IDENTITY() napisan pred in po v t-sql?
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com