SET IDENTITY_INSERT (Transact-SQL)
Позволяет вставлять явные значения в столбец идентификаторов таблицы.
Синтаксис
SET IDENTITY_INSERT [ database_name . [ schema_name] . ] table { ON | OFF }
Аргументы
database_name
Имя базы данных, в которой находится указанная таблица.schema_name
Имя схемы, которой принадлежит таблица.table
Имя таблицы со столбцом идентификаторов.
Замечания
В каждый момент времени только для одной таблицы в сеансе свойство IDENTITY_INSERT может принимать значение ON. Если у какой-то таблицы это свойство уже имеет значение ON и инструкция SET IDENTITY_INSERT ON адресована другой таблице, SQL Server вернет сообщение об ошибке, в котором будет сказано, что свойство SET IDENTITY_INSERT уже приняло значение ON, и приведено имя соответствующей таблицы.
Если вставляемое значение больше текущего значения идентификатора в данной таблице, SQL Server автоматически будет использовать вставленное значение в качестве текущего.
Задание параметра SET IDENTITY_INSERT происходит во время выполнения или запуска инструкций, а не их синтаксического анализа.
Разрешения
Пользователь должен быть владельцем объекта или членом предопределенной роли сервера sysadmin, предопределенной роли базы данных db_owner или db_ddladmin.
Примеры
В следующем примере создается таблица со столбцом идентификаторов, и показывается, как можно использовать параметр SET IDENTITY_INSERT для заполнения промежутков между значениями идентификаторов, вызванных выполнением инструкции DELETE.
USE AdventureWorks;
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')
INSERT INTO dbo.Tool(Name) VALUES ('Hammer')
INSERT INTO dbo.Tool(Name) VALUES ('Saw')
INSERT INTO dbo.Tool(Name) VALUES ('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 a warning.
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 products table.
DROP TABLE dbo.Tool
GO