Motivo de usar @@ identity en lugar de scope_identity

votos
11

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?

Publicado el 09/12/2008 a las 18:11
fuente por usuario
En otros idiomas...                            


5 respuestas

votos
18

@@IDENTITYdevolverá 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. @@IDENTITYdevolverá el valor de identidad mediante la INSERT IGNORE declaración del desencadenador, no la instrucción de inserción del bloque. Por lo general, es un error a menos que sepa lo que hace.

Respondida el 09/12/2008 a las 18:17
fuente por usuario

votos
12

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.
Respondida el 09/12/2008 a las 18:20
fuente por usuario

votos
2

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 :)
Respondida el 09/12/2008 a las 18:16
fuente por usuario

votos
1

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

Respondida el 09/12/2008 a las 21:48
fuente por usuario

votos
0

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.

Respondida el 09/12/2008 a las 21:44
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more