SET IDENTITY_INSERT (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics
Позволяет вставлять явные значения в столбец идентификаторов таблицы.
Соглашения о синтаксисе Transact-SQL
Синтаксис
SET IDENTITY_INSERT [ [ database_name . ] schema_name . ] table_name { ON | OFF }
Аргументы
database_name
Имя базы данных, в которой находится указанная таблица.
schema_name
Имя схемы, которой принадлежит таблица.
table_name
Имя таблицы со столбцом идентификаторов.
Замечания
В каждый момент времени только для одной таблицы в сеансе свойство IDENTITY_INSERT может принимать значение ON. Если для таблицы уже задано значение ON, а инструкция SET IDENTITY_INSERT ON выдана для другой таблицы, SQL Server возвращает сообщение об ошибке, которое указывает, что set IDENTITY_INSERT уже включен и сообщает, что для нее задано значение ON.
Если вставленное значение больше текущего значения удостоверения для таблицы, SQL Server автоматически использует новое вставленное значение в качестве текущего значения удостоверения.
Задание параметра SET IDENTITY_INSERT происходит во время выполнения или запуска инструкций, а не их синтаксического анализа.
Разрешения
Пользователь должен быть владельцем таблицы или иметь разрешение ALTER на таблицу.
Примеры
В следующем примере создается таблица со столбцом идентификаторов, и показывается, как можно использовать параметр SET IDENTITY_INSERT
для заполнения промежутков между значениями идентификаторов, вызванных выполнением инструкции DELETE
.
USE AdventureWorks2022;
GO
-- Create tool table.
CREATE TABLE dbo.Tool(
ID INT IDENTITY NOT NULL PRIMARY KEY,
Name VARCHAR(40) NOT NULL
);
GO
-- Inserting 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;
-- should return an 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.
INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel');
GO
-- 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
См. также
CREATE TABLE (Transact-SQL)
IDENTITY (Property) (Transact-SQL)
SCOPE_IDENTITY (Transact-SQL)
INSERT (Transact-SQL)
Инструкции SET (Transact-SQL)