Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Область применения:SQL Server
База данных SQL Azure
Управляемый экземпляр SQL Azure
Azure Synapse Analytics
База данных SQL в Microsoft Fabric
Позволяет вставлять явные значения в столбец идентификаторов таблицы.
Соглашения о синтаксисе 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, и сообщает таблицу, для которой заданы ON.
Если вставленное значение больше текущего значения удостоверения для таблицы, SQL Server автоматически использует новое вставленное значение в качестве текущего значения удостоверения.
Параметр SET IDENTITY_INSERT устанавливается во время выполнения или выполнения, а не во время синтаксического анализа.
Разрешения
Пользователь должен принадлежать таблице или иметь разрешение ALTER на таблицу.
Примеры
В следующем примере создается таблица со столбцом идентификаторов, и показывается, как можно использовать параметр SET IDENTITY_INSERT для заполнения промежутков между значениями идентификаторов, вызванных выполнением инструкции DELETE.
USE AdventureWorks2022;
GO
Создайте таблицу инструментов.
CREATE TABLE dbo.Tool
(
ID INT IDENTITY NOT NULL PRIMARY KEY,
Name VARCHAR (40) NOT NULL
);
GO
Вставка значений в таблицу продуктов.
INSERT INTO dbo.Tool (Name)
VALUES ('Screwdriver'),
('Hammer'),
('Saw'),
('Shovel');
GO
Создайте пробел в значениях удостоверений.
DELETE dbo.Tool
WHERE Name = 'Saw';
GO
SELECT *
FROM dbo.Tool;
GO
Попробуйте вставить явное значение идентификатора 3.
INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO
Предыдущий INSERT код должен возвращать следующую ошибку:
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.
Задайте для IDENTITY_INSERT значение ON.
SET IDENTITY_INSERT dbo.Tool ON;
GO
Попробуйте вставить явное значение идентификатора 3.
INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO
SELECT *
FROM dbo.Tool;
GO
Удалить таблицу инструментов.
DROP TABLE dbo.Tool;
GO