Ambas funciones devuelven el id de la última fila insertada en columnas de identidad, a continuación se describen en que consisten:
* @@identity: Devuelve el valor de identidad de una tabla en la sesión actual. Si se inserta una fila en la tabla A, se inserta una fila en la tabla B, y seleccione @@IDENTITY, obtendrá el valor de identidad insertado en la Tabla B.
create table tableA (
ID1 int identity(1,1),
Detalle varchar(100)
)
create table tableB (
ID1 int identity(20,1),
Detalle varchar(100)
)
Insert Into tableA Values ('Detalle1')
Insert Into tableB Values ('Detalle2')
Select @@IDENTITY -- resultado 20
Ahora si realizamos la inserción en una tabla pero ésta tiene un trigger que inserta registros en una segunda tabla, la función retornara el Id de la última tabla y no de la que inicialmente estabas insertando.
* SCOPE_IDENTITY(): Retorna el último valor de identidad generado para cualquier tabla, no sólo en la sesión actual sino también en el ámbito actual (es un modulo como procedimiento almacenado, trigger, funciones). Es la mejor opción para solucionar un escenario como lo expuesto anteriormente, ya que devuelve así sea que la tabla donde se inserte tenga trigger, el último Id del último Scope utilizado.
Un método no es mejor que el otro, sólo se tiene que entender el comportamiento de cada uno y verificar si los resultados son los esperados.
"" Si tienes dudas o quieras ampliar este artículo, lo puedes hacer dejando tus comentarios. Además, si lo consideras interesante puedes compartirlo con amigos y seguidores a través de los botones sociales que aparecen en esta página.""
0 comentarios:
Publicar un comentario