¿Cómo obtener el último Id autogenerado al insertar datos en una tabla de SQL Server?

Si tenemos una tabla con un campo autoincremental que sirve de identificador, puede resultarnos útil saber cuál es el último valor que ha adquirido dicho campo, para utilizarlo posteriormente.

Para obtener el ID generado en la última sentencia ejecutada, podemos utilizar los siguientes procedimientos:

  • La variable @@IDENTITY devuelve el último ID generado en cualquier tabla de la sesión activa, en todos los ámbitos. Hay que tener cuidado, puesto que, al ser independiente del ámbito, se podría obtener el valor de un trigger en vez de la sentencia ejecutada.
  • La función SCOPE_IDENTITY() devuelve el último ID generado para cualquier tabla de la sesión activa y en el ámbito actual. Es la función que más se utiliza.
  • La función IDENT_CURRENT('nombre_tabla') devuelve el último ID generado para nombre_tabla en cualquier sesión y cualquier ámbito. Se utiliza cuando se quiere saber el último ID generado para una tabla distinta de la que hemos utilizado en la operación de inserción.
  • Uso de la cláusula OUTPUT de la orden INSERT, que permitirá acceder a cada fila que ha sido insertada mediante dicha orden. Su ámbito se corresponde a la orden específica, y es la más correcta. No obstante, implica una mayor complejidad, puesto que su resultado se debe insertar en una tabla temporal o variable. Da un resultado correcto, incluso si se realiza un ROLLBACK a la orden INSERT. No obstante, se ejecuta antes que los triggers, por lo que no se puede utilizar para devolver valores que se generen en los mismos.
Créditos