SET IDENTITY_INSERT (Transact-SQL)

Позволяет вставлять явные значения в столбец идентификаторов таблицы.

Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск).

Значок ссылки на раздел Cинтаксические обозначения в 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 происходит во время выполнения или запуска инструкций, а не их синтаксического анализа.

Разрешения

Пользователь должен быть владельцем таблицы или иметь разрешение ALTER на таблицу.

Примеры

В следующем примере создается таблица со столбцом идентификаторов, и показывается, как можно использовать параметр SET IDENTITY_INSERT для заполнения промежутков между значениями идентификаторов, вызванных выполнением инструкции DELETE.

USE AdventureWorks2012;
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 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

См. также

Справочник

CREATE TABLE (SQL Server)

IDENTITY (свойство) (Transact-SQL)

SCOPE_IDENTITY (Transact-SQL)

Инструкция INSERT (Transact-SQL)

Инструкции SET (Transact-SQL)