Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 11405|Răspunde: 0

[Bacșișuri] sql primește valoarea principală a cheii după ce așteaptă INSERT

[Copiază linkul]
Postat pe 05.05.2015 17:35:51 | | |

Funcția de preluare a valorii de identificare în SQL SERVER 2000     
  În SQL Server 2000, coloana de identitate este definită de IDENTITY, iar următorul aspect este legat de obținerea valorii de identitate a ultimei înregistrări inserate   
   
  Un exemplu ilustrativ al funcției lui off     
   
          În SQL Server, poți folosi SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() pentru a obține valoarea ultimei înregistrări inserate, iar diferența dintre ele este:   
  SCOPE_IDENTITY() returnează ultima valoare IDENTITY inserată în coloana IDENTITY în același scop. Un scop este un modul – proceduri stocate, declanșatoare, funcții   
   
  Numere sau loturi. Prin urmare, dacă două instrucțiuni sunt în aceeași procedură stocată, funcție sau lot, ele sunt în același scop.   
  @@IDENTITY returnează ultima valoare de identificare generată în toate tabelele din sesiunea curentă   
  IDENT_CURRENT() returnează ultima valoare de identificare generată pentru tabelul specificat în orice sesiune și în orice domeniu   
  Iată un exemplu pentru a ilustra diferențele lor     
   
  -- a) Cod exemplu     
  --   ===========================================   
  -- Creează o masă de testare   
  --   ===========================================   
  USE tempdb   
  DU-TE   
   
  CREATE TABLE t1(id int IDENTITY,col int)   
  INSERT T1 SELECT 1   
  UNIUNEA TUTUROR SELECTEAZĂ 2   
  CREATE TABLE t2(id int IDENTITY,col int)   
  DU-TE   
   
  CREEAZĂ TR_insert_t2 TRIGGER PE T2   
  PENTRU INSERT   
  CA   
          INSERT T1 SELECT 3   
  DU-TE     
   
  --   ===========================================   
  -- Testează trei funcții: 1   
  --   ===========================================   
  INSERAȚI VALORILE T2(1)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Pentru t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Pentru t2]=IDENT_CURRENT(N't2')   
   
  /*--Rezultat   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pentru t1 IDENT_CURRENT() Pentru t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  1                                     3                         3                                                     1   
   
  (Numărul de rânduri afectate este 1 rând)   
  --*/   
  DU-TE   
   
  --   ===========================================   
  -- Testează trei funcții: 2   
  --   ===========================================   
  INSERAȚI VALORILE T1(10)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Pentru t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Pentru t2]=IDENT_CURRENT(N't2')   
   
  /*--Rezultat   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pentru t1 IDENT_CURRENT() Pentru t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  4                                     4                         4                                                     1   
   
  (Numărul de rânduri afectate este 1 rând)   
  --*/   
  DU-TE   
   
  --   ===========================================   
  -- Testează trei funcții: 3   
  -- ** Deschide o nouă conexiune și execută următorul cod **   
  --   ===========================================   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Pentru t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Pentru t2]=IDENT_CURRENT(N't2')   
   
  /*--Rezultat   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pentru t1 IDENT_CURRENT() Pentru t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  NULL NULL 4 & n     
   
  --===========================================   
  -- Șterge mediul de testare   
  --   ===========================================   
  DROP TABLE T1,T2     
   
  -- b) Descrierea rezultatului codului     
  După cum puteți vedea din codul de mai sus:   
  IDENT_CURRENT() returnează întotdeauna ultima valoare identificată introdusă în tabelul specificat   
  @@IDENTITY returnează valoarea de identitate a sesiunii curente, fie că este în același domeniu sau nu, în testele 1 și 2 se poate observa că returnează valoarea de identitate a înregistrării inserate în declanșator și în   
   
  În Testul 3, NULL este returnat deoarece nu există o înregistrare de inserție în sesiunea curentă   
  SCOPE_IDENTITY() returnează valoarea de identificare a aceluiași domeniu al sesiunii curente, astfel încât în testele 1, 2, returnează valoarea care nu este afectată de declanșator, iar în testul 3, deoarece sesiunea curentă nu este interpolată   
   
  record, deci returnează NULL





Precedent:De ce a mers toată lumea la sărbătoarea de 1 Mai?
Următor:Care este diferența între SCOPE_IDENTITY() scris înainte și după în t-sql?
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com