Nuestro team de trabajo ha estado largas horas buscando soluciones a tus interrogantes, te brindamos la resolución por eso deseamos que te sea de mucha apoyo.
Solución:
Si su tabla de SQL Server tiene una columna de tipo INT IDENTITY
(o BIGINT IDENTITY
), luego puede obtener el último valor insertado usando:
INSERT INTO dbo.YourTable(columns....)
VALUES(..........)
SELECT SCOPE_IDENTITY()
Esto funciona siempre que no haya insertado otra fila; solo devuelve la última IDENTITY
valor entregado en este ámbito aquí.
Hay al menos dos opciones más: @@IDENTITY
y IDENT_CURRENT
– lea más sobre cómo funcionan y en qué se diferencian (y podrían brindarle resultados inesperados) en esta excelente publicación de blog de Pinal Dave aquí.
Suponiendo una tabla simple:
CREATE TABLE dbo.foo(ID INT IDENTITY(1,1), name SYSNAME);
podemos capturar IDENTITY
valores en una variable de tabla para su posterior consumo.
DECLARE @IDs TABLE(ID INT);
-- minor change to INSERT statement; add an OUTPUT clause:
INSERT dbo.foo(name)
OUTPUT inserted.ID INTO @IDs(ID)
SELECT N'Fred'
UNION ALL
SELECT N'Bob';
SELECT ID FROM @IDs;
Lo bueno de este método es que (a) maneja inserciones de varias filas (SCOPE_IDENTITY()
solo devuelve el último valor) y (b) evita este error de paralelismo, que puede dar lugar a resultados erróneospero hasta ahora solo se solucionó en SQL Server 2008 R2 SP1 CU5.
Puedes usar:
SELECT IDENT_CURRENT('tablename')
para acceder a la última identidad de una tabla particular.
por ejemplo, considerando el siguiente código:
INSERT INTO dbo.MyTable(columns....) VALUES(..........)
INSERT INTO dbo.YourTable(columns....) VALUES(..........)
SELECT IDENT_CURRENT('MyTable')
SELECT IDENT_CURRENT('YourTable')
Esto produciría el valor correcto para las tablas correspondientes.
Vuelve el ultimo IDENTITY
valor producido en una tabla, independientemente de la conexión que creó el valor y del alcance de la declaración que produjo el valor.
IDENT_CURRENT
no está limitado por el alcance y la sesión; está limitado a una tabla específica. IDENT_CURRENT
devuelve el valor de identidad generado para una tabla específica en cualquier sesión y cualquier ámbito.