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


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)