2008-12-09 6 views
11

Sur une base de données SQL Server 2005, l'un de nos développeurs à distance a simplement vérifié une modification d'une procédure stockée qui a changé "select scope_identity" en "select @@ identity". Connaissez-vous des raisons pour lesquelles vous utiliseriez @@ identity sur scope_identity?Raison de l'utilisation de @@ identity plutôt que scope_identity

+0

Je connais la différence entre les deux, j'essaie juste de penser à la raison pour laquelle vous utiliseriez @@ identity sur scope_identity. –

Répondre

18

@@IDENTITY retournera la dernière valeur d'identité délivrée par la session en cours. SCOPE_IDENTITY() renvoie la dernière valeur d'identité dans la session en cours et la même portée. Ils sont généralement les mêmes, mais supposons qu'un déclencheur est appelé qui a inséré quelque chose quelque part juste avant l'instruction en cours. @@IDENTITY renvoie la valeur d'identité par l'instruction INSERT du déclencheur, pas l'instruction d'insertion du bloc. C'est généralement une erreur à moins qu'il ne sache ce qu'il fait.

2

Je ne peux pas penser à tout, sauf s'il y avait un déclencheur puis inséré une ligne (ou quelque chose) et je voulais vraiment vraiment l'ID de cette ligne déclencheur-insérée plutôt que la ligne que j'ai physiquement changé.

En d'autres termes, non, pas vraiment.

  • AVERTISSEMENT: pas un expert T-SQL :)
12

Voici a link qui peuvent les aider à différencier

ressemble:

  • IDENTITÉ - dernière identité sur la connexion
  • SCOPE_IDENTITY - dernière identité créée explicitement (à l'exclusion déclenche)
  • IDENT_CURRENT ('nom_table') - Dernière identité dans la table indépendamment de la portée ou de la connexion.
0

Si vous voulez l'utilisation du déclencheur, vous pouvez obtenir un autre déclencheur ajouté est la seule raison que je peux trouver. Même alors, il est dangereux qu'un autre déclencheur pourrait être ajouté et encore une fois vous obtiendrez la mauvaise identité. Je soupçonne que le développeur ne sait pas ce qu'il fait. Mais honnêtement, la meilleure chose à faire est de lui demander pourquoi il a fait le changement. Vous pouvez le modifier, mais le développeur doit savoir qu'il ne le fera pas à moins qu'il n'ait besoin de l'identité du déclencheur, car vous ne l'attraperez peut-être pas la prochaine fois.

1

Peut-être devriez-vous demander au développeur la raison de son changement.

Questions connexes