Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 11405|Svar: 0

[Tips] sql får primærnøgleværdien efter at have ventet på INSERT

[Kopier link]
Opslået på 05/05/2015 17.35.51 | | |

Funktion til identifikationsværdihentning i SQL SERVER 2000     
  I SQL Server 2000 defineres identitetskolonnen af IDENTITY, og følgende er relateret til at hente identitetsværdien for den sidst indsatte post   
   
  Et eksempel på en illustration af funktionen af off     
   
          I SQL Server kan du bruge SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() til at få værdien af den sidst indsatte post, og forskellen mellem dem er:   
  SCOPE_IDENTITY() returnerer den sidste IDENTITY-værdi, der er indsat i IDENTITY-kolonnen i samme scope. Et scope er et modul – lagrede procedurer, triggere, funktioner   
   
  Numre eller partier. Derfor, hvis to udsagn er i samme lagrede procedure, funktion eller batch, er de i samme scope.   
  @@IDENTITY Returnerer den sidst genererede identifikationsværdi i alle tabeller i den aktuelle session   
  IDENT_CURRENT() returnerer den sidst genererede identifikationsværdi for den angivne tabel i enhver session og ethvert omfang   
  Her er et eksempel til at illustrere deres forskelle     
   
  -- a) Eksempelkode     
  --   ===========================================   
  -- Opret en testtabel   
  --   ===========================================   
  BRUG tempdb   
  GÅ   
   
  CREATE TABLE t1(id int IDENTITY,col int)   
  INDSÆT t1 VÆLG 1   
  UNION ALLE VÆLG 2   
  CREATE TABLE t2(id int IDENTITY,col int)   
  GÅ   
   
  OPRET TRIGGER TR_insert_t2 PÅ T2   
  FOR INSERT   
  AS   
          INDSÆT t1 VÆLG 3   
  GÅ     
   
  --   ===========================================   
  -- Test tre funktioner: 1   
  --   ===========================================   
  INDSÆT t2-VÆRDIER(1)   
  VÆLG [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   
   
  (Antallet af berørte rækker er 1 række)   
  --*/   
  GÅ   
   
  --   ===========================================   
  -- Test tre funktioner: 2   
  --   ===========================================   
  INDSÆT t1-VÆRDIER(10)   
  VÆLG [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   
   
  (Antallet af berørte rækker er 1 række)   
  --*/   
  GÅ   
   
  --   ===========================================   
  -- Test tre funktioner: 3   
  -- ** Åbn en ny forbindelse og udfør følgende kode **   
  --   ===========================================   
  VÆLG [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     
   
  --===========================================   
  -- Slet testmiljøet   
  --   ===========================================   
  DROP-TABEL T1,T2     
   
  -- b) Beskrivelse af koderesultater     
  Som du kan se fra koden ovenfor:   
  IDENT_CURRENT() returnerer altid den sidst identificerede værdi, der er indsat i den angivne tabel   
  @@IDENTITY Returnerer identitetsværdien for den aktuelle session, uanset om den er i samme scope eller ej, i test 1 og 2, kan det ses, at den returnerer identitetsværdien for den indsatte post i triggeren, og i   
   
  I Test 3 returneres NULL, fordi der ikke er nogen indsættelsespost i den aktuelle session   
  SCOPE_IDENTITY() returnerer identifikationsværdien for samme omfang som den aktuelle session, så i test 1, 2 returnerer den værdi, der ikke påvirkes af triggeren, og i test 3, fordi den aktuelle session ikke interpoleres   
   
  record, så den returnerer NULL





Tidligere:Hvorfor tog alle til 1. maj-helligdagen?
Næste:Hvad er forskellen på at SCOPE_IDENTITY() skrives før og efter i t-sql?
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com