Cet article explore la fonction D’identité dans SQL Server avec des exemples et des différences entre ces fonctions.
vue d’ensemble des colonnes D’identité
dans SQL Server, nous créons une colonne d’identité pour générer automatiquement des valeurs incrémentielles. Il génère des valeurs basées sur la valeur prédéfinie de la graine (valeur initiale) et de l’étape (incrément). Par exemple, supposons que nous ayons une table Employee et que nous souhaitions générer EmployeeID automatiquement., Nous avons un ID d’employé de départ 100 et voulons en outre incrémenter chaque nouvel EmpID d’un. Dans ce cas, nous devons définir les valeurs suivantes.
- la Graine: 100
- pas: 1
nous allons insérer un peu d’enregistrements dans cette table et afficher les enregistrements.
Vous pouvez voir que le premier employé obtient une valeur D’ID 100 et que chaque nouvelle valeur d’ID d’enregistrement obtient un incrément de un.
Nous avons quelques fonctions d’Identité dans SQL Server travailler avec l’IDENTITÉ de colonnes dans une table. Explorons les fonctions D’identité suivantes avec des exemples.,
- SQL @@IDENTITY Function
- SQL SCOPE_IDENTITY() Function
- SQL IDENT_CURRENT Function
- SQL IDENTITY Function
SQL @@IDENTITY Function
Nous utilisons system function @@IDENTITY pour renvoyer la valeur D’identité maximale utilisée dans une table pour la colonne IDENTITY sous la session en cours. Une fois que nous insérons une ligne dans une table, la colonne de fonction @@IDENTITY donne la valeur D’identité générée par l’instruction. Si nous exécutons une requête qui n’a pas généré de valeurs D’identité, nous obtenons une valeur nulle dans la sortie., L’identité SQL @@S’exécute sous la portée de la session en cours. Nous ne pouvons pas l’utiliser sur un serveur distant ou lié.
comprenons-le avec l’exemple suivant.
- Étape 1: nous avons une valeur d’identité maximale actuelle 110 dans la table EmployeeData
- Étape 2: dans la session en cours, nous insérons un enregistrement dans la table EmployeeData., Il incrémente la valeur d’identité d’un
- Étape 3: Nous pouvons vérifier que la valeur d’identité maximale utilisée est 111
- Étape 4: nous utilisons la fonction SELECT @@IDENTITY dans la session en cours pour obtenir la valeur d’identité générée dans cette session
insérons plusieurs enregistrements dans cette table et exécutons la SELECT @@IDENTITY.
Si nous insérons plusieurs enregistrements dans une session, SELECT @@Identity renvoie la valeur D’identité maximale générée dans cette session., Dans l’exemple suivant, nous insérons trois enregistrements, et il incrémente les valeurs D’identité par trois à partir de la valeur d’identité actuelle 111.
Si l’instruction n’a généré aucune valeur d’identité, elle renvoie des valeurs NULL dans la sortie.
fonction SQL SCOPE_IDENTITY ()
Nous utilisons la fonction SCOPE_IDENTITY() pour renvoyer la dernière valeur D’identité dans une table sous la portée actuelle. Une portée peut être un module, un déclencheur, une fonction ou une procédure stockée., Nous pouvons considérer la fonction SQL SCOPE_IDENTITY () similaire à la fonction @@IDENTITY, mais elle est limitée à une portée spécifique. Il renvoie la valeur NULL si cette fonction est impliquée avant qu’une instruction insert ne génère une valeur sous la même portée.
dans l’exemple suivant, nous voyons que @@IDENTITY et SCOPE_IDENTITY() renvoient la même valeur dans la session en cours et une portée similaire.
comprenons la différence entre SCOPE_IDENTITY() et @@IDENTITY avec un autre exemple.,
considérons que nous avons deux tables EmployeeData et Departments table. Nous créons un déclencheur INSERT sur la table EmployeeData. Une fois que nous avons inséré une ligne sur EmployeeData, il appelle un déclencheur défini pour insérer une ligne dans les départements.
dans la requête suivante, nous créons un déclencheur pour insérer la valeur par défaut » IT » dans la table departments pour chaque insertion dans la table EmployeeData.,f7″>
1
2
3
4
5
6
|
CREATE TRIGGER T_INSERT_DEPARTMENT
SUR EmployeeData
POUR INSÉRER
COMMENCER
INSÉRER les Ministères VALUES (‘ON’)
à la FIN;
|
nous allons insérer la valeur dans le tableau de données et afficher le résultat de deux @@IDENTITY et SCOPE_IDENTITY() les fonctions.,
dans la session en cours, nous avons inséré des données dans la table EmployeeData. Il génère une identité dans ce tableau. La valeur de graine d’identité est 1 pour la table EmployeeData.
Une fois que nous insérons la valeur dans la table EmployeeData, il déclenche un déclencheur pour insérer la valeur dans la table Departments. La valeur de départ d’identité est de 100 pour la table départements.
- nous obtenons la sortie 100 pour la fonction SELECT @@IDENTITY
- la fonction SCOPE_IDENTITY renvoie la valeur d’identité sous la portée actuelle uniquement., Il donne la sortie 1 pour cette fonction
SQL IDENT_CURRENT() function
Nous utilisons la fonction IDENT_CURRENT pour renvoyer la dernière valeur D’identité générée pour une table spécifiée sous n’importe quelle connexion. Il ne prend pas en compte la portée de la requête SQL qui génère la valeur d’identité. Nous devons spécifier la table pour laquelle nous voulons vérifier la valeur d’identité.
dans la capture d’écran suivante, nous pouvons voir que nous insérons des données dans L’id de Session 64 et qu’il génère la valeur d’identité 2 dans la table EmployeeData.,
nous pouvons vérifier dans une autre fenêtre de connexion la valeur d’identité actuelle pour la table EmployeeData et obtenir la même sortie que la valeur d’identité 2.,
1
|
SELECT IDENT_CURRENT(‘EmployeeData’) AS IdentityValue
|
SQL IDENTITY Function
In my previous article, we explored SQL SELECT INTO Statement, to create a new table and inserted data into it from the existing table., Nous pouvons utiliser la fonction SQL IDENTITY pour insérer des valeurs d’identité dans la table créée par SQL SELECT INTO instruction.
par défaut, si une table source contient une colonne IDENTITY, la table créée à l’aide D’une instruction SELECT INTO en hérite. Considérez un scénario dans lequel vous souhaitez créer une table à l’aide de L’instruction SELECT INTO à partir de la sortie d’une vue ou d’une jointure à partir de plusieurs tables. Dans ce cas, vous souhaitez également créer une colonne D’identité dans une nouvelle table.,
- Remarque: la fonction SQL IDENTITY est différente de la propriété IDENTITY que nous utilisons lors de la création d’une table.
Nous devons spécifier un type de données pour qu’une colonne utilise la fonction SQL Identity. Nous devons également spécifier des valeurs de graine et D’étape pour définir une configuration d’identité.
nous ne pouvons pas utiliser la fonction SQL IDENTITY dans une instruction Select. Nous obtenons le message d’erreur suivant.
Msg 177, Niveau 15, État 1, ligne 2la fonction IDENTITY ne peut être utilisée que lorsque L’instruction SELECT a une clause INTO.,
créons une table à l’aide de L’instruction SQL SELECT INTO avec la requête suivante.
Une fois l’instruction exécutée, vérifiez les propriétés de la table à l’aide de la commande sp_help.
1
|
sp_help ‘TEMPTABLE’
|
Vous pouvez voir la colonne d’IDENTITÉ dans la TEMPTABLE propriétés selon les conditions spécifiées.,
prenons un autre exemple. Exécutez la commande suivante.,
1
2
3
4
5
|
SÉLECTIONNEZ IDENTITÉ( INT, 100, 2) COMME NOUVELLE_ID,
Nom
EN temp2
DE employeedata;
|
Nous avons déjà l’IDENTITÉ de la colonne dans la EmployeeData table. La nouvelle table temp2 hérite également de la colonne identité., Nous ne pouvons pas avoir plusieurs colonnes D’identité dans une table. Pour cette raison, nous obtenons le message d’erreur suivant.
Msg 8108, niveau 16, état 1, ligne 1Pas ajouter une colonne identity, en utilisant L’instruction SELECT INTO, à la table ‘temp2’, qui a déjà la colonne ‘ID’ qui hérite de la propriété identity.
Summary
- SQL IDENTITY Functions SCOPE_IDENTITY, IDENT_CURRENT et @@IDENTITY renvoie une sortie similaire pour une colonne D’identité dans la session en cours
- SCOPE_IDENTITY renvoie uniquement des valeurs sous la portée en cours., Nous pouvons définir la portée comme un module, une procédure stockée, un déclencheur ou une fonction
- la fonction IDENT_CURRENT renvoie la valeur d’identité pour une table spécifiée concernant une connexion qui a modifié la valeur
- nous pouvons utiliser la fonction SQL IDENTITY pour définir L’identité dans une table créée à l’aide de SQL SELECT INTO statement
Conclusion
eu dans cet article, nous avons exploré les fonctions Identity dans SQL Server. Nous devrions être familiers avec les fonctions pour les utiliser dans l’écriture de requêtes T-SQL. Si vous avez des commentaires ou des questions, n’hésitez pas à les laisser dans les commentaires ci-dessous.,
- auteur
- messages récents
Il est le créateur de l’une des plus grandes collections en ligne gratuites d’articles sur un seul sujet, avec sa série de 50 parties sur SQL Server toujours sur les groupes de disponibilité. Sur la base de sa contribution à la communauté SQL Server, il a été reconnu par divers prix, y compris le prestigieux « meilleur auteur de l’année » en continu en 2020 et 2021 à SQLShack.,
Raj est toujours intéressé par les nouveaux défis, donc si vous avez besoin d’aide de consultation sur un sujet couvert dans ses écrits, il peut être joint à rajendra.gupta16 @ gmail.,com
voir tous les messages de Rajendra Gupta
- effectuer des mises à niveau mineures et majeures pour AWS RDS SQL Server – Janvier 29, 2021
- déploiement d’instances PostgreSQL AWS RDS – 27 janvier 2021
- migration de vos bases de données SQL sur site vers AWS RDS SQL Server à l’aide d’AWS DMS-25 janvier 2021