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
Répondre
@@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.
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 :)
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.
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.
Peut-être devriez-vous demander au développeur la raison de son changement.
- 1. L'utilisation de "SELECT SCOPE_IDENTITY()" dans ADODB Recordset
- 2. jquery slideDown plutôt que slideAndPush
- 3. WCF Identity NTLM Kerberos
- 4. Comment convertir Scope_Identity() en int?
- 5. SCOPE_IDENTITY Et au lieu de Insert Trigger contourner
- 6. LINQ Inserts sans colonne IDENTITY
- 7. app pool identity - administrateur de la batterie
- 8. PHP Exceptions plutôt que des erreurs
- 9. Les conditions d'erreur de gestion dans Lex plutôt que Yacc?
- 10. Exécuter index.php plutôt que de lister les fichiers
- 11. Utiliser le contrôleur de segment pour "pousser" plutôt que UINavigationController
- 12. DataSet est plus lent que DataReader en raison de ...?
- 13. SQLite prend-il en charge SCOPE_IDENTITY?
- 14. L'équivalent de la fonction SQLServer SCOPE_IDENTITY() dans mySQL?
- 15. Que signifie la propriété de colonne "Is Identity" dans SQL Server?
- 16. Comment utiliser WindowsIdentity.Impersonate pour obtenir la connexion de l'utilisateur, plutôt que le compte ASPNET
- 17. Comment hors la colonne IDENTITY de la table dans TSQL
- 18. Obtenir la valeur plutôt que la formule dans RGoogleDocs
- 19. Avantages/inconvénients d'une classe :: Base (plutôt que acts_as_foo)
- 20. ObjectDataSource - SelectParameters utilisant la valeur par défaut plutôt que FormParameter
- 21. jquery ui datepicker - altfield en tant que div plutôt qu'entrée
- 22. MS VC++ 6: Pourquoi retourner! False plutôt que vrai?
- 23. Peut-on utiliser InstantDjango plutôt que l'installation normale
- 24. Quand utiliser les propriétés plutôt que des fonctions
- 25. Identity Insert manquant dans tous les objets de transformation de flux de données SSIS pertinents?
- 26. L'utilisation de MS SQL Identity est-elle une bonne pratique?
- 27. Utilisation de Regex pour générer des chaînes plutôt que de les faire correspondre
- 28. Jointure de table croisée à l'aide de MYSQL plutôt que MSSQL
- 29. Faire défiler les éléments avec jQuery en fonction de l'attribut name plutôt que de l'ID
- 30. Est-il possible de configurer de manière déclarative le cache spring.net plutôt que d'utiliser des attributs?
Je connais la différence entre les deux, j'essaie juste de penser à la raison pour laquelle vous utiliseriez @@ identity sur scope_identity. –