sql >> Databáze >  >> RDS >> Sqlserver

získat nové ID záznamu SQL

SELECT SCOPE_IDENTITY() 

použití @@IDENTITY může mít neočekávané výsledky, takže buďte opatrní, jak jej používáte. Spouštěče, které vkládají záznamy do jiných tabulek, způsobí změnu hodnoty @@IDENTITY - kde SCOPE_IDENTITY() vám poskytne poslední identitu pouze z vašeho aktuálního oboru.

Zde je ukázka, která ukáže rozdíl mezi @@IDENTITY a SCOPE_INSERT() a jak mohou vrátit různé hodnoty..

use tempdb
go
create table table1
    (ID int identity)
go
create table table2
    (ID int identity(100, 1))
go
create trigger temptrig 
    on table1 
    for insert
as
begin

    insert  table2 
     default values;

end
go
insert  table1 
default values;
select  SCOPE_IDENTITY(), 
        @@IDENTITY

Další možností, kterou zde nikdo neprobíral, je použití klauzule OUTPUT, která je v SQL 2005. V tomto případě stačí přidat výstupní klauzuli do vložení a poté tuto sadu záznamů zachytit z kódu. To funguje dobře při vkládání více záznamů namísto pouhého 1...

use tempdb
go
create table table1
    (ID int identity)
go
insert   table1 
output   inserted.ID
default values;
--OR...
insert   table1 
output   inserted.$identity
default values;


  1. Digitální transformace:Vše začíná uvažováním dat

  2. Jak deklarovat proměnnou v dotazu PostgreSQL

  3. Jak funguje SQLite Min()

  4. Jak vytvořit menu v SQLPlus nebo PL/SQL