sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server:¿la mejor manera de obtener la identidad de la fila insertada?

  • @@IDENTITY devuelve el último valor de identidad generado para cualquier tabla en la sesión actual, en todos los ámbitos. Tienes que tener cuidado aquí , ya que es a través de ámbitos. Podría obtener un valor de un disparador, en lugar de su declaración actual.

  • SCOPE_IDENTITY() devuelve el último valor de identidad generado para cualquier tabla en la sesión actual y el ámbito actual. Generalmente lo que desea usar .

  • IDENT_CURRENT('tableName') devuelve el último valor de identidad generado para una tabla específica en cualquier sesión y cualquier ámbito. Esto le permite especificar de qué tabla desea el valor, en caso de que las dos anteriores no sean exactamente lo que necesita (muy raro ). Además, como mencionó @Guy Starbuck, "Puede usar esto si desea obtener el valor de IDENTIDAD actual para una tabla en la que no ha insertado un registro".

  • La OUTPUT cláusula del INSERT le permitirá acceder a cada fila que se insertó a través de esa declaración. Dado que se limita a la declaración específica, es más sencillo que las otras funciones anteriores. Sin embargo, es un poco más detallado (deberá insertar en una variable de tabla/tabla temporal y luego consultar eso) y da resultados incluso en un escenario de error donde la declaración se revierte. Dicho esto, si su consulta utiliza un plan de ejecución en paralelo, este es el único método garantizado para obtener la identidad (aparte de desactivar el paralelismo). Sin embargo, se ejecuta antes activadores y no se pueden utilizar para devolver valores generados por activadores.