Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 11405|Svare: 0

[Tips] sql får primærnøkkelverdien etter å ha ventet på INSERT

[Kopier lenke]
Publisert på 05.05.2015 17:35:51 | | |

Identifikasjonsverdihentingsfunksjon i SQL SERVER 2000     
  I SQL Server 2000 defineres identitetskolonnen av IDENTITY, og følgende er relatert til å hente identitetsverdien til den siste innsatte posten   
   
  Et eksempel på en illustrasjon av funksjonen til av     
   
          I SQL Server kan du bruke SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() for å hente verdien av den siste innsatte posten, og forskjellen mellom dem er:   
  SCOPE_IDENTITY() returnerer den siste IDENTITY-verdien som ble satt inn i IDENTITY-kolonnen i samme omfang. Et scope er en modul – lagrede prosedyrer, triggere, funksjoner   
   
  Tall eller batcher. Derfor, hvis to setninger er i samme lagrede prosedyre, funksjon eller batch, er de i samme omfang.   
  @@IDENTITY Returnerer den siste identifikasjonsverdien som ble generert i alle tabeller i den nåværende økten   
  IDENT_CURRENT() returnerer den siste identifiseringsverdien som ble generert for den angitte tabellen i en hvilken som helst økt og ethvert omfang   
  Her er et eksempel for å illustrere forskjellene deres     
   
  -- a) Eksempelkode     
  --   ===========================================   
  -- Opprett en testtabell   
  --   ===========================================   
  BRUK tempdb   
  GÅ   
   
  CREATE TABLE t1(id int IDENTITY, col int)   
  SETT INN t1 VELG 1   
  UNION ALLE VELG 2   
  CREATE TABLE t2(id int IDENTITY,col int)   
  GÅ   
   
  OPPRETT TRIGGER TR_insert_t2 PÅ T2   
  FOR INSERT   
  AS   
          SETT INN t1 VELG 3   
  GÅ     
   
  --   ===========================================   
  -- Test tre funksjoner: 1   
  --   ===========================================   
  SETT INN T2-VERDIER(1)   
  VELG [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() For t2]=IDENT_CURRENT(N't2')   
   
  /*--Resultat   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() For t1 IDENT_CURRENT() For t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  1                                     3                         3                                                     1   
   
  (Antall berørte rader er 1 rad)   
  --*/   
  GÅ   
   
  --   ===========================================   
  -- Test tre funksjoner: 2   
  --   ===========================================   
  SETT INN T1-VERDIER(10)   
  VELG [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() For t2]=IDENT_CURRENT(N't2')   
   
  /*--Resultat   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() For t1 IDENT_CURRENT() For t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  4                                     4                         4                                                     1   
   
  (Antall berørte rader er 1 rad)   
  --*/   
  GÅ   
   
  --   ===========================================   
  -- Test tre funksjoner: 3   
  -- ** Åpne en ny forbindelse og kjør følgende kode **   
  --   ===========================================   
  VELG [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() For t2]=IDENT_CURRENT(N't2')   
   
  /*--Resultat   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() For t1 IDENT_CURRENT() For t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  NULL NULL 4 &n     
   
  --===========================================   
  -- Slett testmiljøet   
  --   ===========================================   
  SLIPP TABELL t1,t2     
   
  -- b) Beskrivelse av koderesultater     
  Som du kan se fra koden ovenfor:   
  IDENT_CURRENT() returnerer alltid den siste identifiserte verdien som ble satt inn i den angitte tabellen   
  @@IDENTITY Returnerer identitetsverdien til den nåværende økten, enten i samme omfang eller ikke, i tester 1 og 2, kan man se at den returnerer identitetsverdien til den innsatte posten i triggeren, og i   
   
  I Test 3 returneres NULL fordi det ikke finnes noen innsettingspost i den nåværende økten   
  SCOPE_IDENTITY() returnerer identifikasjonsverdien for samme omfang som den nåværende økten, så i test 1, 2 returnerer den verdien som ikke påvirkes av triggeren, og i test 3, fordi den nåværende økten ikke interpoleres   
   
  post, så den returnerer NULL





Foregående:Hvorfor dro alle til 1. mai-helligdagen?
Neste:Hva er forskjellen på at SCOPE_IDENTITY() skrives før og etter i t-sql?
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com