Maison > base de données > tutoriel mysql > Quelles sont les différences entre `@@IDENTITY`, `SCOPE_IDENTITY()`, `IDENT_CURRENT()` et `IDENTITY()` dans SQL Server ?

Quelles sont les différences entre `@@IDENTITY`, `SCOPE_IDENTITY()`, `IDENT_CURRENT()` et `IDENTITY()` dans SQL Server ?

Linda Hamilton
Libérer: 2025-01-20 12:42:11
original
499 Les gens l'ont consulté

What are the Differences Between `@@IDENTITY`, `SCOPE_IDENTITY()`, `IDENT_CURRENT()`, and `IDENTITY()` in SQL Server?

Compréhension approfondie des fonctions @@IDENTITY, SCOPE_IDENTITY(), IDENT_CURRENT() et IDENTITY() de SQL Server

Dans la programmation de bases de données SQL, obtenir la dernière valeur d'identité insérée est une tâche critique. Diverses fonctions sont prévues à cet effet, chacune avec ses propres nuances. SCOPE_IDENTITY(), IDENTITY(), @@IDENTITY et IDENT_CURRENT() sont quelques-unes des fonctions les plus couramment utilisées, mais les différences entre elles peuvent prêter à confusion.

Comprendre la portée

Comprendre le concept de « portée » est essentiel pour comprendre les différences entre ces fonctions. En SQL, la portée fait référence au niveau auquel une requête ou un bloc de code s'exécute. Il existe deux périmètres principaux :

  • Portée de la session : Le contexte d'une seule connexion à une base de données.
  • Portée de la requête : Le contexte d'une seule requête ou d'une procédure stockée.

Différence de fonction

En fonction de la portée et de la fonction, voici la répartition de chaque fonction :

  • @@IDENTITY : Renvoie la dernière valeur d'identité créée dans la même session. Cette fonction ne dépend pas de la portée de la requête ou de la procédure stockée et est généralement utilisée pour récupérer des valeurs d'identité globales.
  • SCOPE_IDENTITY() : Renvoie la dernière valeur d'identité créée au sein de la même session et de la même portée. Contrairement à @@IDENTITY, cette fonction ne prend en compte que le contexte de la requête ou de la procédure stockée actuelle.
  • IDENT_CURRENT(name) : Renvoie la dernière valeur d'identité créée pour une table ou une vue spécifique, quelle que soit la portée de la session ou de la requête. Cette fonction peut être utilisée pour récupérer des valeurs d'identité sur différentes requêtes et sessions.
  • IDENTITY() : Contrairement aux trois autres fonctions, IDENTITY() est principalement utilisée pour générer des valeurs d'identité dans les requêtes SELECT...INTO. Il ne récupère pas les valeurs d'identité existantes.

Scénarios d'utilisation

Pour illustrer ces différences, considérons le scénario suivant :

  • Exemple 1 : Insérer un enregistrement avec une colonne identité et le récupérer à l'aide de @@IDENTITY.
<code class="language-sql">INSERT INTO MyTable (Name) OUTPUT INSERTED.ID INTO @Identity;
PRINT @Identity;  -- 打印全局插入的标识值</code>
Copier après la connexion
  • Exemple 2 : Créez un déclencheur sur MyTable pour insérer un enregistrement dans une autre table et récupérer la valeur d'identité des deux tables.
<code class="language-sql">CREATE TRIGGER MyTrigger ON MyTable AFTER INSERT AS
INSERT INTO OtherTable (Name) VALUES (NEW.Name);

INSERT INTO MyTable (Name) VALUES ('Test');

SELECT @@identity AS MyIdentity;  -- 打印在MyTable中插入的标识值
SELECT scope_identity() AS TriggerIdentity;  -- 打印触发器在OtherTable中插入的标识值</code>
Copier après la connexion

Dans ces scénarios, @@IDENTITY et SCOPE_IDENTITY() se comportent différemment en raison de l'implication du déclencheur.

Suggestions de bonnes pratiques

Dans la plupart des cas, SCOPE_IDENTITY() est la fonction recommandée pour récupérer la dernière valeur d'identité créée. Il fournit les valeurs les plus fiables et contextuelles dans la requête ou la procédure stockée actuelle. Cependant, si vous devez récupérer une valeur d'identité dans une portée ou une session différente, IDENT_CURRENT(name) fournit cette fonctionnalité.

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