ultimo scope_identity obtener insertado funcion ejemplo sql-server sql-server-2005

sql-server - scope_identity - sql server next identity value



Motivo de usar @@ identity en lugar de scope_identity (5)

En una base de datos de SQL Server 2005, uno de nuestros desarrolladores remotos simplemente registró un cambio en un procedimiento almacenado que cambió "select scope_identity" por "select @@ identity". ¿Conoces alguna razón por la que usarías @@ identity sobre scope_identity?


Aquí hay un enlace que puede ayudar a diferenciarlos

parece:

  • IDENTIDAD - última identidad en la conexión
  • SCOPE_IDENTITY : última identidad que creaste explícitamente (excluye los disparadores)
  • IDENT_CURRENT (''tablename'') - Última identidad en la tabla, independientemente del alcance o la conexión.

No puedo pensar en ninguno, a menos que haya un disparador y luego inserte una fila (o algo así) y realmente quería la identificación de esa fila activada por el activador en lugar de la fila que físicamente cambié.

En otras palabras, no, en realidad no.

  • DESCARGO DE RESPONSABILIDAD: No es un experto en T-SQL :)

Si quisieras que el uso del disparador pudieras obtener otro disparador añadido es la única razón por la que puedo pensar. Incluso entonces es peligroso ya que se podría agregar otro disparador y nuevamente obtendría una identidad incorrecta. Sospecho que el desarrollador no sabe lo que está haciendo. Pero honestamente, lo mejor que puede hacer es preguntarle por qué hizo el cambio. Podrías volver a cambiarlo, pero el desarrollador necesita saber que no volverá a hacer eso a menos que necesite la identidad del activador, ya que es posible que no lo captures la próxima vez.


Tal vez deberías preguntarle al desarrollador su razón de ser para hacer el cambio.


@@IDENTITY devolverá el último valor de identidad emitido por la sesión actual. SCOPE_IDENTITY() devuelve el último valor de identidad en la sesión actual y el mismo alcance. Por lo general, son lo mismo, pero supongamos que se llama un disparador que inserta algo en algún lugar justo antes de la declaración actual. @@IDENTITY devolverá el valor de identidad mediante la INSERT del desencadenador, no la instrucción de inserción del bloque. Por lo general, es un error a menos que sepa lo que hace.