title | description | author | ms.author | ms.reviewer | ms.date | ms.service | ms.subservice | ms.topic | f1_keywords | helpviewer_keywords | dev_langs | monikerRange | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
SET IDENTITY_INSERT (Transact-SQL) |
Transact-SQL reference for the SET IDENTITY_INSERT statement. When set to ON, this permits inserting explicit values into the identity column of a table. |
WilliamDAssafMSFT |
wiassaf |
randolphwest |
01/16/2025 |
sql |
t-sql |
reference |
|
|
|
=azuresqldb-current || >=sql-server-2016 || >=sql-server-linux-2017 || =azure-sqldw-latest |
[!INCLUDE sql-asdb-asdbmi-asa-pdw]
Allows explicit values to be inserted into the identity column of a table.
:::image type="icon" source="../../includes/media/topic-link-icon.svg" border="false"::: Transact-SQL syntax conventions
SET IDENTITY_INSERT [ [ database_name . ] schema_name . ] table_name { ON | OFF }
The name of the database in which the specified table resides.
The name of the schema to which the table belongs.
The name of a table with an identity column.
At any time, only one table in a session can have the IDENTITY_INSERT
property set to ON
. If a table already has this property set to ON
, and a SET IDENTITY_INSERT ON
statement is issued for another table, [!INCLUDE ssNoVersion] returns an error message that states SET IDENTITY_INSERT
is already ON
, and reports the table for which ON
is set.
If the value inserted is larger than the current identity value for the table, [!INCLUDE ssNoVersion] automatically uses the new inserted value as the current identity value.
The setting of SET IDENTITY_INSERT
is set at execute or run time and not at parse time.
User must own the table or have ALTER
permission on the table.
The following example creates a table with an identity column and shows how the SET IDENTITY_INSERT
setting can be used to fill a gap in the identity values caused by a DELETE
statement.
USE AdventureWorks2022;
GO
Create tool table.
CREATE TABLE dbo.Tool
(
ID INT IDENTITY NOT NULL PRIMARY KEY,
Name VARCHAR (40) NOT NULL
);
GO
Insert values into products table.
INSERT INTO dbo.Tool (Name)
VALUES ('Screwdriver'),
('Hammer'),
('Saw'),
('Shovel');
GO
Create a gap in the identity values.
DELETE dbo.Tool
WHERE Name = 'Saw';
GO
SELECT *
FROM dbo.Tool;
GO
Try to insert an explicit ID value of 3.
INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO
The previous INSERT
code should return the following error:
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.
Set IDENTITY_INSERT
to ON
.
SET IDENTITY_INSERT dbo.Tool ON;
GO
Try to insert an explicit ID value of 3.
INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO
SELECT *
FROM dbo.Tool;
GO
Drop tool table.
DROP TABLE dbo.Tool;
GO