SET IDENTITY_INSERT (Transact-SQL)
S’applique à :SQL Serverbase de données Azure SQLAzure SQL Managed InstanceAzure Synapse Analytics
Autorise l'insertion de valeurs explicites dans la colonne d'identité d'une table.
Conventions de la syntaxe Transact-SQL
Syntaxe
SET IDENTITY_INSERT [ [ database_name . ] schema_name . ] table_name { ON | OFF }
Arguments
database_name
Nom de la base de données dans laquelle réside la table spécifiée.
schema_name
Nom du schéma auquel appartient la table.
table_name
Nom d’une table avec une colonne d’identité.
Notes
À tout moment, une seule table d’une session peut avoir la propriété IDENTITY_INSERT
définie sur ON
. Si une table a déjà cette propriété définie sur ON
et qu’une instruction SET IDENTITY_INSERT ON
est émise pour une autre table, SQL Server retourne un message d’erreur indiquant que SET IDENTITY_INSERT
est déjà ON
, et signale la table pour laquelle ON
est définie.
Si la valeur insérée est supérieure à la valeur d'identité actuelle de la table, SQL Server utilise automatiquement la nouvelle valeur comme valeur d'identité actuelle.
Le paramètre de SET IDENTITY_INSERT
est défini au moment de l’exécution ou de l’exécution et non au moment de l’analyse.
Autorisations
L’utilisateur doit posséder la table ou disposer d’une autorisation ALTER
sur la table.
Exemples
L'exemple ci-dessous crée une table comportant une colonne d'identité et montre comment l'option SET IDENTITY_INSERT
peut être utilisée pour combler un vide dans les valeurs d'identité, résultant d'une instruction DELETE
.
USE AdventureWorks2022;
GO
Créer une table d’outils.
CREATE TABLE dbo.Tool
(
ID INT IDENTITY NOT NULL PRIMARY KEY,
Name VARCHAR (40) NOT NULL
);
GO
Insérez des valeurs dans la table des produits.
INSERT INTO dbo.Tool (Name)
VALUES ('Screwdriver'),
('Hammer'),
('Saw'),
('Shovel');
GO
Créez un écart dans les valeurs d’identité.
DELETE dbo.Tool
WHERE Name = 'Saw';
GO
SELECT *
FROM dbo.Tool;
GO
Essayez d’insérer une valeur d’ID explicite de 3.
INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO
Le code INSERT
précédent doit retourner l’erreur suivante :
An explicit value for the identity column in table 'AdventureWorks2022.dbo.Tool' can only be specified when a column list is used and IDENTITY_INSERT is ON.
Définissez IDENTITY_INSERT
sur ON
.
SET IDENTITY_INSERT dbo.Tool ON;
GO
Essayez d’insérer une valeur d’ID explicite de 3.
INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO
SELECT *
FROM dbo.Tool;
GO
Supprimer la table d’outils.
DROP TABLE dbo.Tool;
GO