Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server - Meilleur moyen d'obtenir l'identité de la ligne insérée ?

  • @@IDENTITY renvoie la dernière valeur d'identité générée pour n'importe quelle table de la session en cours, dans toutes les étendues. Vous devez être prudent ici , puisqu'il s'agit de plusieurs étendues. Vous pouvez obtenir une valeur à partir d'un déclencheur, au lieu de votre instruction actuelle.

  • SCOPE_IDENTITY() renvoie la dernière valeur d'identité générée pour n'importe quelle table dans la session en cours et la portée en cours. Généralement ce que vous voulez utiliser .

  • IDENT_CURRENT('tableName') renvoie la dernière valeur d'identité générée pour une table spécifique dans n'importe quelle session et n'importe quelle étendue. Cela vous permet de spécifier de quelle table vous voulez la valeur, au cas où les deux ci-dessus ne seraient pas tout à fait ce dont vous avez besoin (très rare ). De plus, comme @Guy Starbuck l'a mentionné, "Vous pouvez l'utiliser si vous souhaitez obtenir la valeur IDENTITY actuelle pour une table dans laquelle vous n'avez pas inséré d'enregistrement."

  • Le OUTPUT clause du INSERT vous permettra d'accéder à chaque ligne insérée via cette instruction. Puisqu'il est limité à la déclaration spécifique, c'est plus simple que les autres fonctions ci-dessus. Cependant, c'est un peu plus verbeux (vous devrez insérer dans une table variable/table temporaire, puis interroger celle-ci) et cela donne des résultats même dans un scénario d'erreur où l'instruction est annulée. Cela dit, si votre requête utilise un plan d'exécution parallèle, c'est la seule méthode garantie pour obtenir l'identité (à moins de désactiver le parallélisme). Cependant, il est exécuté avant déclencheurs et ne peut pas être utilisé pour renvoyer des valeurs générées par des déclencheurs.