sql >> Databasteknik >  >> RDS >> Sqlserver

få nytt SQL-post-ID

SELECT SCOPE_IDENTITY() 

att använda @@IDENTITY kan få oväntade resultat, så var försiktig med hur du använder den. Utlösare som infogar poster i andra tabeller kommer att göra att @@IDENTITY-värdet ändras - där SCOPE_IDENTITY() ger dig den sista identiteten från endast ditt nuvarande omfång.

Här är ett exempel som visar skillnaden mellan @@IDENTITY och SCOPE_INSERT() och hur de kan returnera olika värden.

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

Ett annat alternativ som ingen har diskuterat här är att använda OUTPUT-satsen som finns i SQL 2005. I det här fallet skulle du bara behöva lägga till output-satsen i din infogning och sedan fånga upp den postmängden från din kod. Detta fungerar bra när du infogar flera poster istället för bara en...

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. Hur använder jag Postgres JSONB datatype med JPA?

  2. Hämta värden från första och sista raden per grupp

  3. Hur kan jag hasha lösenord i postgresql?

  4. Introduktion till Amazon Web Services (AWS) automatisk skalning