Saltar al contenido

Obtener el ID de la última fila insertada (con instrucción SQL)

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.

Reseñas y valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *