Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 11405|Odpoveď: 0

[Tipy] sql získa primárnu kľúčovú hodnotu po čakaní na INSERT

[Kopírovať odkaz]
Zverejnené 5. 5. 2015 17:35:51 | | |

Funkcia načítania identifikačných hodnôt v SQL SERVER 2000     
  V SQL Server 2000 je stĺpec identity definovaný pomocou IDENTITY a nasledujúce súvisí so získaním hodnoty identity posledného vloženého záznamu   
   
  Príklad ukázania funkcie vypnutia     
   
          V SQL Serveri môžete použiť SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() na získanie hodnoty posledného vloženého záznamu a rozdiel medzi nimi je:   
  SCOPE_IDENTITY() vráti poslednú hodnotu IDENTITY vloženú do stĺpca IDENTITY v rovnakom rozsahu. Scope je modul – uložené procedúry, spúšťače, funkcie   
   
  Čísla alebo dávky. Preto, ak sú dva výroky v rovnakej uloženej procedúre, funkcii alebo dávke, sú v rovnakom rozsahu.   
  @@IDENTITY Vráti poslednú identifikačnú hodnotu generovanú vo všetkých tabuľkách aktuálnej relácie   
  IDENT_CURRENT() vracia poslednú identifikačnú hodnotu generovanú pre špecifikovanú tabuľku v ľubovoľnej relácii a v akomkoľvek rozsahu   
  Tu je príklad, ktorý ilustruje ich rozdiely     
   
  -- a) Ukážkový kód     
  --   ===========================================   
  -- Vytvoriť testovaciu tabuľku   
  --   ===========================================   
  POUŽÍVAJTE tempdb   
  CHOĎ   
   
  VYTVORIŤ TABUĽKU t1(id int IDENTITY,col int)   
  VLOŽIŤ t1 VYBRAŤ 1   
  ZJEDNOTENIE VŠETKÝCH VYBRANÝCH 2   
  CREATE TABLE t2(id int IDENTITY,col int)   
  CHOĎ   
   
  VYTVORIŤ TRIGGER TR_insert_t2 NA T2   
  PRE VLOŽENIE   
  AS   
          VLOŽIŤ t1 VYBRAŤ 3   
  CHOĎ     
   
  --   ===========================================   
  -- Otestovať tri funkcie: 1   
  --   ===========================================   
  VLOŽTE T2 HODNOTY(1)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Pre t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Pre t2]=IDENT_CURRENT(N't2')   
   
  /*--Výsledok   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pre t1 IDENT_CURRENT() Pre t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  1                                     3                         3                                                     1   
   
  (Počet ovplyvnených riadkov je 1 riadok)   
  --*/   
  CHOĎ   
   
  --   ===========================================   
  -- Otestovať tri funkcie: 2   
  --   ===========================================   
  VLOŽTE T1 HODNOTY(10)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Pre t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Pre t2]=IDENT_CURRENT(N't2')   
   
  /*--Výsledok   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pre t1 IDENT_CURRENT() Pre t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  4                                     4                         4                                                     1   
   
  (Počet ovplyvnených riadkov je 1 riadok)   
  --*/   
  CHOĎ   
   
  --   ===========================================   
  -- Otestovať tri funkcie: 3   
  -- ** Otvoriť nové spojenie a vykonať nasledujúci kód **   
  --   ===========================================   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Pre t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Pre t2]=IDENT_CURRENT(N't2')   
   
  /*--Výsledok   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pre t1 IDENT_CURRENT() Pre t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  NULL NULL 4 &n     
   
  --===========================================   
  -- Vymazať testovacie prostredie   
  --   ===========================================   
  DROP TABLE t1,t2     
   
  -- b) Popis výsledkov kódu     
  Ako môžete vidieť z vyššie uvedeného kódu:   
  IDENT_CURRENT() vždy vráti poslednú identifikovanú hodnotu vloženú v zadanej tabuľke   
  @@IDENTITY Vráti identitnú hodnotu aktuálnej relácie, či už v rovnakom rozsahu alebo nie, v testoch 1 a 2 je vidieť, že vracia identitnú hodnotu vloženého záznamu v triggeri a v   
   
  V teste 3 sa NULL vráti, pretože v aktuálnej relácii nie je vložený záznam   
  SCOPE_IDENTITY() vráti identifikačnú hodnotu rovnakého rozsahu ako aktuálna relácia, takže v teste 1, 2 vráti hodnotu, ktorá nie je ovplyvnená spúšťačom, a v teste 3, pretože aktuálna relácia nie je interpolovaná   
   
  record, takže vráti NULL





Predchádzajúci:Prečo všetci išli na sviatok Prvého mája?
Budúci:Aký je rozdiel medzi tým, keď sa SCOPE_IDENTITY() píše pred a po v t-sql?
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com