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
См. также
Справочник
IDENTITY (свойство) (Transact-SQL)