Maison > base de données > tutoriel mysql > Quelle est la différence entre `@@IDENTITY`, `SCOPE_IDENTITY()`, `IDENT_CURRENT()` et `IDENTITY()` dans SQL Server ?

Quelle est la différence entre `@@IDENTITY`, `SCOPE_IDENTITY()`, `IDENT_CURRENT()` et `IDENTITY()` dans SQL Server ?

Linda Hamilton
Libérer: 2025-01-20 13:04:11
original
833 Les gens l'ont consulté

What's the Difference Between `@@IDENTITY`, `SCOPE_IDENTITY()`, `IDENT_CURRENT()`, and `IDENTITY()` in SQL Server?

Fonctions d'identité SQL Server : une comparaison détaillée

@@IDENTITY, SCOPE_IDENTITY(), IDENT_CURRENT() et IDENTITY() sont tous liés à la récupération de valeurs à partir de colonnes d'identité dans SQL Server, mais leur portée et leur application diffèrent considérablement.

Comprendre la portée des fonctions d'identité SQL Server

« Portée » fait référence au contexte dans lequel la valeur d'identité est générée. Cela peut être :

  • Portée de la session : La connexion actuelle à la base de données.
  • Portée de la requête/procédure stockée : Le bloc d'exécution actuel d'une requête ou d'une procédure stockée.

Répartition des fonctions

  • @@IDENTITY : Renvoie la dernière valeur d'identité générée dans la session en cours, quelle que soit la portée (requête, procédure stockée ou déclencheur).

  • SCOPE_IDENTITY() : Renvoie la dernière valeur d'identité générée dans la session et portée actuelles. C'est la fonction la plus couramment recommandée car elle fournit des résultats plus précis.

  • IDENT_CURRENT('table_name') : Renvoie la dernière valeur d'identité générée pour une table spécifique, quelle que soit la session ou la portée. Ceci est utile lorsque vous avez besoin de la dernière valeur d'identité pour une table particulière dans différentes sessions ou contextes.

  • IDENTITY() : Ceci n'est pas utilisé pour récupérer les valeurs d'identité. C'est un mot-clé utilisé pour définir une colonne d'identité lors de la création d'une table en utilisant la syntaxe SELECT ... INTO.

Scénarios illustratifs

Examinons différents scénarios pour mettre en évidence les différences :

  • Instruction INSERT unique : Si une seule instruction INSERT ajoute une ligne, SCOPE_IDENTITY() et @@IDENTITY renverront la même valeur.

  • Insertion basée sur un déclencheur : Si un déclencheur insère une ligne dans une deuxième table après un INSERT dans la première table, SCOPE_IDENTITY() renverra l'identité de la table directement affectée par l'instruction actuelle (la première table), tandis que @@IDENTITY renverra l'identité de la table affectée en dernier dans la session (qui pourrait être la deuxième table).

Choisir la bonne fonction

Dans la plupart des cas, SCOPE_IDENTITY() est préféré car il fournit des résultats spécifiques au contexte. @@IDENTITY est utile lorsque vous avez besoin de la valeur d'identité la plus récente, quelle que soit son origine au sein de la session. IDENT_CURRENT() est crucial lorsque vous avez besoin de la dernière valeur d'identité pour une table particulière, quelle que soit la session en cours. N'oubliez pas que IDENTITY() sert à définir les colonnes d'identité, et non à récupérer leurs valeurs.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal