sql >> Database teknologi >  >> RDS >> Sqlserver

få nyt SQL record ID

SELECT SCOPE_IDENTITY() 

Brug af @@IDENTITY kan have uventede resultater, så vær forsigtig med, hvordan du bruger den. Triggere, der indsætter poster i andre tabeller, vil få @@IDENTITY-værdien til at ændre sig - hvor SCOPE_IDENTITY() kun vil give dig den sidste identitet fra dit nuværende omfang.

Her er et eksempel, der viser forskellen mellem @@IDENTITY og SCOPE_INSERT() og hvordan de kan returnere forskellige værdier.

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

En anden mulighed, som ingen har diskuteret her, er at bruge OUTPUT-klausulen, der er i SQL 2005. I dette tilfælde skal du blot tilføje output-klausulen til din insert og derefter fange det postsæt fra din kode. Dette fungerer godt, når du indsætter flere poster i stedet for kun 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. Meddelelse af den generelle tilgængelighed af SQL Safe Backup 8.7.2

  2. Fejl ved omdøbning af en kolonne i MySQL

  3. Databaseindeksering i PostgreSQL

  4. SQL unikt varchar spørgsmål om følsomhed over for store og små bogstaver