Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 11405|Antwoord: 0

[Tips] sql krijgt de primaire sleutelwaarde nadat je hebt gewacht op INSERT

[Link kopiëren]
Geplaatst op 05-05-2015 17:35:51 | | |

Identificatiewaarde-ophaalfunctie in SQL SERVER 2000     
  In SQL Server 2000 wordt de identiteitskolom gedefinieerd door IDENTITY, en het volgende heeft betrekking op het verkrijgen van de identiteitswaarde van het laatst ingevoegde record   
   
  Een voorbeeldillustratie van de functie van off     
   
          In SQL Server kun je SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() gebruiken om de waarde van het laatst ingevoegde record te krijgen, en het verschil tussen deze is als volgt:   
  SCOPE_IDENTITY() geeft de laatst ingevoerde IDENTITY-waarde terug in de kolom IDENTITY in dezelfde scope. Een scope is een module - opgeslagen procedures, triggers, functies   
   
  Aantallen of batches. Daarom, als twee statements in dezelfde opgeslagen procedure, functie of batch zitten, vallen ze in dezelfde scope.   
  @@IDENTITY Geeft de laatst gegenereerde identificatiewaarde terug die in alle tabellen in de huidige sessie is gegenereerd   
  IDENT_CURRENT() geeft de laatst gegenereerde identificatiewaarde terug voor de opgegeven tabel in elke sessie en elke scope   
  Hier is een voorbeeld om hun verschillen te illustreren     
   
  -- a) Voorbeeldcode     
  --   ===========================================   
  -- Maak een testtabel aan   
  --   ===========================================   
  USE tempdb   
  GA   
   
  CREATE TABLE t1(id int IDENTITY,col int)   
  VOEG t1 IN, SELECTEER 1   
  VAKBOND ALLEN SELECTEREN 2   
  CREATE TABLE t2(id int IDENTITY,col int)   
  GA   
   
  MAAK TRIGGER TR_insert_t2 OP T2 AAN   
  VOOR INZET   
  AS   
          VOEG t1 SELECTEER 3   
  GA     
   
  --   ===========================================   
  -- Test drie functies: 1   
  --   ===========================================   
  VOEG T2-WAARDEN IN(1)   
  SELECTEER [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Voor t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Voor t2]=IDENT_CURRENT(N't2')   
   
  /*--Resultaat   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Voor t1 IDENT_CURRENT() Voor t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  1                                     3                         3                                                     1   
   
  (Het aantal getroffen rijen is 1 rij)   
  --*/   
  GA   
   
  --   ===========================================   
  -- Test drie functies: 2   
  --   ===========================================   
  VUL t1-WAARDEN IN(10)   
  SELECTEER [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Voor t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Voor t2]=IDENT_CURRENT(N't2')   
   
  /*--Resultaat   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Voor t1 IDENT_CURRENT() Voor t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  4                                     4                         4                                                     1   
   
  (Het aantal getroffen rijen is 1 rij)   
  --*/   
  GA   
   
  --   ===========================================   
  -- Test drie functies: 3   
  -- ** Open een nieuwe verbinding en voer de volgende code uit **   
  --   ===========================================   
  SELECTEER [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Voor t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Voor t2]=IDENT_CURRENT(N't2')   
   
  /*--Resultaat   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Voor t1 IDENT_CURRENT() Voor t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  NULL NULL 4 &n     
   
  --===========================================   
  -- Verwijder de testomgeving   
  --   ===========================================   
  DROP TABLE t1,t2     
   
  -- b) Coderesultaatbeschrijving     
  Zoals je kunt zien uit de bovenstaande code:   
  IDENT_CURRENT() geeft altijd de laatst geïdentificeerde waarde terug die in de opgegeven tabel is ingevoegd   
  @@IDENTITY Retourneert de identiteitswaarde van de huidige sessie, of deze nu in dezelfde scope is of niet, in tests 1 en 2, is te zien dat het de identiteitswaarde van het ingevoegde record in de trigger teruggeeft, en in   
   
  In Test 3 wordt NULL teruggegeven omdat er geen insertierecord is in de huidige sessie   
  SCOPE_IDENTITY() geeft de identificatiewaarde terug van dezelfde scope van de huidige sessie, dus in test 1, 2 geeft het de waarde terug die niet door de trigger wordt beïnvloed, en in test 3, omdat de huidige sessie niet geïnterpoleerd is   
   
  record, dus het geeft NULL terug





Vorig:Waarom ging iedereen naar de 1 Mei-feestdag?
Volgend:Wat is het verschil tussen SCOPE_IDENTITY() die vóór en na in t-sql wordt geschreven?
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com