Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Neue SQL-Datensatz-ID erhalten

SELECT SCOPE_IDENTITY() 

Die Verwendung von @@IDENTITY kann zu unerwarteten Ergebnissen führen, seien Sie also vorsichtig, wie Sie diese verwenden. Trigger, die Datensätze in andere Tabellen einfügen, bewirken, dass sich der @@IDENTITY-Wert ändert – wobei SCOPE_IDENTITY() Ihnen die letzte Identität nur aus Ihrem aktuellen Bereich gibt.

Hier ist ein Beispiel, das den Unterschied zwischen @@IDENTITY und SCOPE_INSERT() zeigt und wie sie unterschiedliche Werte zurückgeben können..

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

Eine weitere Option, die hier noch niemand besprochen hat, ist die Verwendung der OUTPUT-Klausel in SQL 2005. In diesem Fall müssten Sie nur die Ausgabeklausel zu Ihrer Einfügung hinzufügen und dann dieses Recordset aus Ihrem Code abfangen. Dies funktioniert gut, wenn Sie mehrere Datensätze anstelle von nur 1 einfügen ...

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;