Описание тега identity-insert

ʻIDENTITY_INSERT` - это опция базы данных Sql Server, которая позволяет явно указывать значения для столбца идентификаторов в таблице во время операции вставки.

При использовании свойства Identity для столбца в базе данных Sql значения для столбца затем назначаются сервером Sql, и назначенное значение может быть возвращено с помощьюSCOPE_IDENTITY() или похожие.

Однако в определенных условиях может потребоваться подавить автоматическое поведение свойства идентификации в столбце и вместо этого предоставить для столбца значение, указанное пользователем.

В SET IDENTITY_INSERT для этого можно использовать опцию.

Пример:

create table MyTable
(
 id int identity(1,1) NOT NULL,
 name nvarchar(50) NOT NULL
);

В нормальных условиях с IDENTITY_INSERT off, значения для столбца идентификаторов нельзя указать вручную:

SET IDENTITY_INSERT MyTable OFF; -- Which is the Default
insert into MyTable(name) values ('Andrew');
-- 1 row(s) affected

insert into MyTable(id, name) values (5, 'Andrew');
-- Cannot insert explicit value for identity column in table 'MyTable' when IDENTITY_INSERT is set to OFF.

Включив IDENTITY_INSERT, значения для id Должно быть предоставлено

SET IDENTITY_INSERT MyTable ON;
insert into MyTable(id, name) values (6, 'Charles');
-- 1 row(s) affected

insert into MyTable(name) values ('Dan');
-- Explicit value must be specified for identity column in table 'MyTable' either when IDENTITY_INSERT is set to ON or when a replication user is inserting into a NOT FOR REPLICATION identity column.

Ссылки

  1. Идентификация MSDN (свойство) http://msdn.microsoft.com/en-us/library/ms186775.aspx