Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 11405|Odpověď: 0

[Tipy] sql získá primární klíčovou hodnotu po čekání na INSERT

[Kopírovat odkaz]
Zveřejněno 05.05.2015 17:35:51 | | |

Funkce načítání identifikačních hodnot v SQL SERVER 2000     
  V SQL Server 2000 je sloupec identity definován pomocí IDENTITY a následující se týká získání hodnoty identity posledního vloženého záznamu   
   
  Příklad funkce vypnuté     
   
          V SQL Serveru můžete použít SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() k získání hodnoty posledního vloženého záznamu, přičemž rozdíl mezi nimi je:   
  SCOPE_IDENTITY() vrátí poslední hodnotu IDENTITY vloženou do sloupce IDENTITY ve stejném rozsahu. Scope je modul – uložené procedury, spouštěče, funkce   
   
  Čísla nebo šarže. Pokud jsou tedy dva výroky ve stejné uložené procedurě, funkci nebo dávce, jsou ve stejném rozsahu.   
  @@IDENTITY Vrátí poslední identifikační hodnotu generovanou ve všech tabulkách aktuální relace   
  IDENT_CURRENT() vrací poslední identifikační hodnotu generovanou pro specifikovanou tabulku v jakékoli relaci a v jakémkoli rozsahu   
  Tady je příklad, který ilustruje jejich rozdíly     
   
  -- a) Ukázkový kód     
  --   ===========================================   
  -- Vytvořit testovací tabulku   
  --   ===========================================   
  POUŽÍVEJTE tempdb   
  JDI   
   
  VYTVOŘIT TABULKU t1(id int IDENTITY,col int)   
  VLOŽTE T1 VYBERTE 1   
  SVAZ VŠECH VYBRANÝCH 2   
  CREATE TABLE t2(id int IDENTITY,col int)   
  JDI   
   
  VYTVOŘTE TR_insert_t2 TRIGGERU NA T2   
  PRO VLOŽENÍ   
  AS   
          VLOŽTE T1 VYBERTE 3   
  JDI     
   
  --   ===========================================   
  -- Otestujte tři funkce: 1   
  --   ===========================================   
  VLOŽTE T2 HODNOTY(1)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Pro t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Pro t2]=IDENT_CURRENT(N't2')   
   
  /*--Výsledek   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pro t1 IDENT_CURRENT() Pro t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  1                                     3                         3                                                     1   
   
  (Počet dotčených řádků je 1 řádek)   
  --*/   
  JDI   
   
  --   ===========================================   
  -- Otestujte tři funkce: 2   
  --   ===========================================   
  VLOŽTE T1 HODNOTY(10)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Pro t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Pro t2]=IDENT_CURRENT(N't2')   
   
  /*--Výsledek   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pro t1 IDENT_CURRENT() Pro t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  4                                     4                         4                                                     1   
   
  (Počet dotčených řádků je 1 řádek)   
  --*/   
  JDI   
   
  --   ===========================================   
  -- Otestujte tři funkce: 3   
  -- ** Otevřete nové spojení a spusněte následující kód **   
  --   ===========================================   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Pro t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Pro t2]=IDENT_CURRENT(N't2')   
   
  /*--Výsledek   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Pro t1 IDENT_CURRENT() Pro t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  NULL NULL 4&n     
   
  --===========================================   
  -- Smazat testovací prostředí   
  --   ===========================================   
  DROP TABLE t1,t2     
   
  -- b) Popis výsledků kódu     
  Jak můžete vidět z výše uvedeného kódu:   
  IDENT_CURRENT() vždy vrací poslední identifikovanou hodnotu vloženou do zadané tabulky   
  @@IDENTITY Vrací identitní hodnotu aktuální relace, ať už ve stejném rozsahu nebo ne, v testech 1 a 2 lze vidět, že vrací identitní hodnotu vloženého záznamu v triggeru a v   
   
  V testu 3 se NULL vrací, protože v aktuální relaci není vložený záznam   
  SCOPE_IDENTITY() vrací identifikační hodnotu stejného rozsahu aktuální relace, takže v testu 1, 2 vrací hodnotu, která není spouštěčem ovlivněna, a v testu 3, protože aktuální relace není interpolována   
   
  record, takže vrací NULL





Předchozí:Proč všichni jeli na svátky prvního máje?
Další:Jaký je rozdíl mezi tím, když je SCOPE_IDENTITY() napsáno před a po v t-sql?
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com