SET IDENTITY_INSERT (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsBase de données SQL dans Microsoft Fabric

En utilisant cette affirmation, vous pouvez insérer des valeurs explicites dans la IDENTITY colonne d’un tableau.

Conventions de la syntaxe Transact-SQL

Syntaxe

SET IDENTITY_INSERT [ [ database_name . ] schema_name . ] table_name { ON | OFF }

Arguments

database_name

Le nom de la base de données où se trouve la table spécifiée.

schema_name

Le nom du schéma contenant 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 à ON, et que vous émettez une SET IDENTITY_INSERT ON instruction pour une autre table, SQL Server renvoie un message d’erreur indiquant SET IDENTITY_INSERT que est ONdéjà , et rapporte la table pour laquelle ON est défini.

  • Lorsque l’argument increment de la IDENTITY fonction est positif et que la valeur insérée est supérieure à la valeur d’identité actuelle de la table, le SQL Moteur de base de données utilise automatiquement la nouvelle valeur insérée comme valeur d’identité actuelle.
  • Lorsque l’argument increment de la IDENTITY fonction est négatif, et que la valeur insérée est plus petite que la valeur d’identité actuelle pour la table, SQL Server utilise automatiquement la nouvelle valeur insérée 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

Vous devez posséder la table ou avoir ALTER la permission d’en parler.

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 précédent INSERT renvoie 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