sql >> Base de Datos >  >> RDS >> Sqlserver

obtener una nueva ID de registro SQL

SELECT SCOPE_IDENTITY() 

usar @@IDENTITY puede tener resultados inesperados, así que tenga cuidado de cómo lo usa. Los disparadores que insertan registros en otras tablas harán que el valor de @@IDENTITY cambie, donde SCOPE_IDENTITY() le dará la última identidad solo de su alcance actual.

Aquí hay una muestra que mostrará la diferencia entre @@IDENTITY y SCOPE_INSERT() y cómo pueden devolver valores diferentes.

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

Otra opción que nadie ha discutido aquí es usar la cláusula OUTPUT que está en SQL 2005. En este caso, solo tendría que agregar la cláusula de salida a su inserción y luego capturar ese conjunto de registros de su código. Esto funciona bien cuando se insertan varios registros en lugar de solo 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;