2008-12-09 11 views
11

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

+0

Sé la diferencia entre los dos, solo estoy tratando de pensar por qué usaría @@ identity sobre scope_identity. –

Respuesta

18

@@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.

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.

  • AVISO: No es un experto en T-SQL :)
12

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.
0

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.

1

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

Cuestiones relacionadas