sql >> Database >  >> RDS >> Sqlserver

nieuwe SQL-record-ID ophalen

SELECT SCOPE_IDENTITY() 

het gebruik van @@IDENTITY kan onverwachte resultaten hebben, dus wees voorzichtig met het gebruik ervan. Triggers die records invoegen in andere tabellen zullen ervoor zorgen dat de @@IDENTITY-waarde verandert - waarbij SCOPE_IDENTITY() u de laatste identiteit geeft van alleen uw huidige bereik.

Hier is een voorbeeld dat het verschil laat zien tussen @@IDENTITY en SCOPE_INSERT() en hoe ze verschillende waarden kunnen retourneren.

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

Een andere optie die niemand hier heeft besproken, is om de OUTPUT-clausule te gebruiken die in SQL 2005 zit. In dit geval hoeft u alleen de output-clausule toe te voegen aan uw insert en vervolgens die recordset uit uw code te halen. Dit werkt goed bij het invoegen van meerdere records in plaats van slechts 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. Hoe een enkele kolomwaarden te splitsen in meerdere kolomwaarden?

  2. TSQL:een weergave maken die toegang heeft tot meerdere databases

  3. ORA-01653:kan tabel niet uitbreiden met in tabelruimte ORA-06512

  4. Hoe voer je een selectiequery uit in een DO-blok?