Поделиться через


SET IDENTITY_INSERT (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL AzureAzure 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, и сообщает таблицу, для которой заданы 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