Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 11405|Vastaus: 0

[Vinkkejä] sql saa ensisijaisen avaimen arvon odotettuaan INSERT-vaihetta

[Kopioi linkki]
Julkaistu 5.5.2015 17.35.51 | | |

Tunnistusarvojen hakutoiminto SQL SERVER 2000:ssa     
  SQL Server 2000:ssa identiteettisarake määritellään IDENTITY-muodossa, ja seuraava asia liittyy viimeksi lisätyn tietueen identiteettiarvon saamiseen   
   
  Esimerkki pois-funktion havainnollistuksesta     
   
          SQL Serverissä voit käyttää SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() saadaksesi viimeksi lisätyn tietueen arvon, ja niiden ero on:   
  SCOPE_IDENTITY() palauttaa viimeisen IDENTITY-arvon, joka on lisätty IDENTITY-sarakkeeseen, samassa sulatusalueessa. Scope on moduuli – tallennetut proseduurit, triggerit, funktiot   
   
  Määrät vai erät. Siksi, jos kaksi lausetta ovat samassa tallennetussa proseduurissa, funktiossa tai erässä, ne kuuluvat samaan laajuuteen.   
  @@IDENTITY Palauttaa viimeisimmän tunnistearvon, joka on luotu kaikissa tauluissa nykyisessä istunnossa   
  IDENT_CURRENT() palauttaa viimeisen tunnistearvon, joka on luotu määritetylle taululle missä tahansa istunnossa ja missä tahansa laajuudessa   
  Tässä on esimerkki, joka havainnollistaa heidän erojaan     
   
  -- a) Esimerkkikoodi     
  --   ===========================================   
  -- Luo testitaulukko   
  --   ===========================================   
  KÄYTÄ tempdb   
  MENE   
   
  LUO TAULU t1(id int IDENTITY, col int)   
  LISÄÄ t1 VALITSE 1   
  UNION ALL SELECT 2   
  LUO TAULU t2(id int IDENTITY, col int)   
  MENE   
   
  LUO TRIGGER TR_insert_t2 T2:SSA   
  INSERTILLE   
  AS   
          LISÄÄ T1 VALITSE 3   
  MENE     
   
  --   ===========================================   
  -- Testaa kolme toimintoa: 1   
  --   ===========================================   
  LISÄÄ t2-ARVOT(1)   
  VALITSE [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() For t2]=IDENT_CURRENT(N't2')   
   
  /*--Tulos   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() T1:lle IDENT_CURRENT() T2:lle                                         
  ------------------   ------------   --------------------------   -----------------------   
  1                                     3                         3                                                     1   
   
  (Rivien määrä, johon vaikuttetaan, on 1 rivi)   
  --*/   
  MENE   
   
  --   ===========================================   
  -- Testaa kolme toimintoa: 2   
  --   ===========================================   
  LISÄÄ t1-ARVOT(10)   
  VALITSE [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() For t2]=IDENT_CURRENT(N't2')   
   
  /*--Tulos   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() T1:lle IDENT_CURRENT() T2:lle                                         
  ------------------   ------------   --------------------------   -----------------------   
  4                                     4                         4                                                     1   
   
  (Rivien määrä, johon vaikuttetaan, on 1 rivi)   
  --*/   
  MENE   
   
  --   ===========================================   
  -- Testaa kolme toimintoa: 3   
  -- ** Avaa uusi yhteys ja suorita seuraava koodi **   
  --   ===========================================   
  VALITSE [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() For t2]=IDENT_CURRENT(N't2')   
   
  /*--Tulos   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() T1:lle IDENT_CURRENT() T2:lle                                         
  ------------------   ------------   --------------------------   -----------------------   
  NULL NULL 4 &n     
   
  --===========================================   
  -- Poista testiympäristö   
  --   ===========================================   
  PUDOTA TAULU t1, t2     
   
  -- b) Koodituloksen kuvaus     
  Kuten yllä olevasta koodista näkyy:   
  IDENT_CURRENT() palauttaa aina viimeksi tunnistetun arvon, joka lisätään määritettyyn taulukkoon   
  @@IDENTITY Palauttaa nykyisen istunnon identiteettiarvon, olipa kyse samasta aiheesta tai ei, testeissä 1 ja 2 nähdään, että se palauttaa lisätyn tietueen identiteettiarvon laukaisimessa, ja   
   
  Testissä 3 NULL palautetaan, koska nykyisessä istunnossa ei ole insertion-tietuetta   
  SCOPE_IDENTITY() palauttaa saman nykyisen istunnon laajuuden tunnistearvon, joten testeissä 1, 2 se palauttaa arvon, johon laukaisija ei vaikuta, ja testissä 3, koska nykyinen istunto ei ole interpoloitu   
   
  record, joten se palauttaa NULLin





Edellinen:Miksi kaikki menivät vappujuhlaan?
Seuraava:Mikä on ero siinä, että SCOPE_IDENTITY() kirjoitetaan ennen ja jälkeen t-SQL:ssä?
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com