En SQL Server, puede usar T-SQL @@IDENTITY
función del sistema para devolver el último valor de identidad insertado en la sesión actual.
Tenga en cuenta que devuelve el último valor de identidad generado en any tabla en la sesión actual . Esto contrasta con IDENT_CURRENT()
función, que devuelve el último valor de identidad insertado para una tabla determinada .
El SCOPE_IDENTITY()
la función es muy similar a @@IDENTITY
en que también devuelve el último valor de identidad insertado en la sesión actual. La diferencia es que SCOPE_IDENTITY()
se limita al alcance actual.
Ejemplo 1
Aquí hay un ejemplo de código básico de @@IDENTITY
uso.
SELECT @@IDENTITY AS [Last-Inserted Identity Value];
Resultado:
+--------------------------------+ | Last-Inserted Identity Value | |--------------------------------| | NULL | +--------------------------------+
La razón por la que esto devuelve NULL
es porque abrí una nueva sesión en SQL Server y aún no he actualizado una columna de identidad durante mi sesión actual.
A continuación se muestra un código que realiza algunas actualizaciones de la columna de identidad.
CREATE TABLE Cats(id int IDENTITY); CREATE TABLE Dogs(id int IDENTITY); INSERT Cats DEFAULT VALUES; INSERT Cats DEFAULT VALUES; SELECT @@IDENTITY AS [Last-Inserted Identity Value];
Resultado:
+--------------------------------+ | Last-Inserted Identity Value | |--------------------------------| | 2 | +--------------------------------+
Aquí, creo un par de tablas, inserto algunos datos y luego selecciono el valor de identidad actual.
El valor de identidad actual es 2 porque inserté dos filas en esa tabla.
Ahora insertemos una fila en la otra tabla:
INSERT Dogs DEFAULT VALUES; SELECT @@IDENTITY AS [Last-Inserted Identity Value];
Resultado:
+--------------------------------+ | Last-Inserted Identity Value | |--------------------------------| | 1 | +--------------------------------+
El valor devuelto es 1, porque ese es el último valor de identidad insertado para esta sesión.
Ejemplo 2:Comparado con IDENT_CURRENT()
Aquí se compara con IDENT_CURRENT()
.
SELECT @@IDENTITY AS [@@IDENTITY], IDENT_CURRENT('Cats') AS [IDENT_CURRENT('Cats')], IDENT_CURRENT('Dogs') AS [IDENT_CURRENT('Dogs')];
Resultado:
+--------------+-------------------------+-------------------------+ | @@IDENTITY | IDENT_CURRENT('Cats') | IDENT_CURRENT('Dogs') | |--------------+-------------------------+-------------------------| | 1 | 2 | 1 | +--------------+-------------------------+-------------------------+
Como se mencionó, IDENT_CURRENT()
devuelve su resultado basado en la tabla especificada. Por lo tanto, podemos usarlo para encontrar los últimos valores de identidad para cada tabla.
Ejemplo 3:cambiar a una nueva sesión
Ahora, si abro una nueva conexión y selecciono @@IDENTITY
de nuevo, esto es lo que sucede:
USE Test; SELECT @@IDENTITY AS [@@IDENTITY], IDENT_CURRENT('Cats') AS [IDENT_CURRENT('Cats')], IDENT_CURRENT('Dogs') AS [IDENT_CURRENT('Dogs')];
Resultado:
+--------------+-------------------------+-------------------------+ | @@IDENTITY | IDENT_CURRENT('Cats') | IDENT_CURRENT('Dogs') | |--------------+-------------------------+-------------------------| | NULL | 2 | 1 | +--------------+-------------------------+-------------------------+
El @@IDENTITY
el resultado es NULL porque no he insertado nada en una columna de identidad en la nueva sesión.
El IDENT_CURRENT()
los resultados no son NULL, porque su resultado se basa en la tabla, no en la sesión.
@@IDENTIDAD frente a SCOPE_IDENTITY() frente a IDENT_CURRENT()
Ver IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY en SQL Server:¿Cuál es la diferencia? para ver un ejemplo simple que explica las diferencias entre estas tres funciones.