En una base de datos de SQL Server 2005, uno de nuestros desarrolladores remotos comprobó 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?Motivo de usar @@ identity en lugar de scope_identity
Respuesta
@@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 instrucción 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.
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.
- AVISO: No es un experto en T-SQL :)
Aquí es a link que pueden ayudar a diferenciar los
parece:
- IDENTIDAD - última identidad en la conexión
- SCOPE_IDENTITY - última identidad que ha creado de forma explícita (excluye desencadena)
- IDENT_CURRENT ('tablename') - Última identidad en la tabla, independientemente del alcance o la conexión.
Si desea utilizar el activador puede obtener otro activador agregado es la única razón por la que se me ocurre. 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ía preguntarle al desarrollador su razón de ser para hacer el cambio.
- 1. ¿Cuál es la diferencia entre Scope_Identity(), Identity(), @@ Identity e Ident_Current()?
- 2. ¿Cómo puede SCOPE_IDENTITY devolver nulo cuando @@ IDENTITY no?
- 3. ¿Cuál es el motivo de usar; en listas F # en lugar de,?
- 4. ¿Cuál es el motivo de usar conversiones implícitas/explícitas en lugar de constructores?
- 5. anula "/ auth/identity" -página de omniauth identity
- 6. Motivo para usar versiones anteriores de jQuery?
- 7. Scope_Identity() en Microsoft Access
- 8. SCOPE_IDENTITY en C# - rango
- 9. scope_identity vs ident_current
- 10. SCOPE_IDENTITY() para GUID?
- 11. SCOPE_IDENTITY no funciona en asp.net?
- 12. ¿Por qué seleccionar SCOPE_IDENTITY() devuelve un decimal en lugar de un entero?
- 13. Motivo de OOP poco común en Python?
- 14. Motivo para usar size_t uint32 uint64 etc.
- 15. Motivo de globals() en Python?
- 16. SCOPE_IDENTITY() no funciona
- 17. ¿Soporta SQLite SCOPE_IDENTITY?
- 18. Insertar filas en una tabla con una columna IDENTITY solamente
- 19. C# ¿hay algún motivo para utilizar ArrayList en lugar de List <T>?
- 20. Establezca la variable a SCOPE_IDENTITY dentro de la instrucción IF
- 21. Problemas de Typecasting, cómo usar el viejo == en lugar de ===
- 22. ¿El motivo principal para no volver a usar EJB 3.0?
- 23. Ejemplo de Windows Identity Foundation Solicitud MVC
- 24. Restablecer columna Identity en SQL Server
- 25. Amazon SimpleDB Identity Seed equivalent
- 26. T-Sql @@ Identity
- 27. ¿Debo usar Varnish en lugar de nginx?
- 28. nodejs: ¿qué usar en lugar de require.paths?
- 29. ¿Puedo usar SafeHandle en lugar de IntPtr?
- 30. Cuándo usar HttpApplicationState en lugar de Web.Caching.Cache?
Sé la diferencia entre los dos, solo estoy tratando de pensar por qué usaría @@ identity sobre scope_identity. –