Gestion des identités SQL Server : choisir la bonne fonction (@@IDENTITY, SCOPE_IDENTITY(), IDENT_CURRENT(), OUTPUT)
De nombreuses applications de bases de données nécessitent un accès à l'ID des lignes nouvellement insérées, en particulier lorsqu'il s'agit de tables contenant des colonnes d'identité. SQL Server propose plusieurs façons d'y parvenir ; chaque méthode a des utilisations spécifiques et des inconvénients potentiels.
@@IDENTITY : récupération d'identité à l'échelle de la session
@@IDENTITY
récupère la dernière valeur d'identité générée dans la session en cours, quelle que soit la table ou la portée. La prudence est de mise : @@IDENTITY
peut renvoyer des valeurs provenant d'autres étendues (par exemple, un déclencheur), conduisant potentiellement à des résultats inexacts.
SCOPE_IDENTITY() : récupération d'identité spécifique à la portée
SCOPE_IDENTITY()
fournit une approche plus précise, renvoyant la dernière valeur d'identité générée dans la session et la portée en cours (généralement la base de données actuelle). Sa fiabilité en fait la méthode privilégiée pour la plupart des scénarios. La portée peut être affinée davantage à l'aide de la syntaxe (n)
.
IDENT_CURRENT() : récupération d'identité spécifique à une table
IDENT_CURRENT('tableName')
récupère la dernière valeur d'identité générée pour une table spécifiée, quelle que soit la session ou la portée. Ceci est utile lors de l'accès aux valeurs d'identité à partir d'une table non modifiée dans la session en cours ou lorsque @@IDENTITY
et SCOPE_IDENTITY()
ne conviennent pas.
Clause OUTPUT : récupération d'identité au niveau de l'instruction
La clause OUTPUT
dans une instruction INSERT
offre un moyen direct d'accéder aux ID des lignes insérées dans la portée de l'instruction. Contrairement à @@IDENTITY
, cela évite les problèmes multi-portées. Cependant, cela nécessite l'utilisation de variables de table ou de tables temporaires pour stocker la sortie, ce qui augmente potentiellement la complexité et a un impact sur les performances. Surtout, c'est la seule méthode garantie pour récupérer des identités en exécution parallèle.
La sélection de la bonne méthode de récupération d'identité dépend des besoins spécifiques de l'application. Bien que SCOPE_IDENTITY()
soit généralement recommandé, @@IDENTITY
, IDENT_CURRENT()
et la clause OUTPUT
offrent des alternatives précieuses dans des contextes spécifiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!