У меня есть таблица в базе данных Foo
с именем Bar
, у которой есть столбец с именем ID
, который является первичным ключом, и эта база данных находится в разработке SQL Server.
Я пытаюсь скопировать данные с нашего производственного сервера на сервер разработки, чтобы я мог играть с указанными данными, поэтому я выполняю следующее:
set IDENTITY_INSERT Foo.dbo.Bar ON
insert into Foo.dbo.Bar
(
ID
,Something
,Else
,Is
,Going
,Horribly
,Wrong
,With
,SQL
)
select
ID
,Something
,Else
,Is
,Going
,Horribly
,Wrong
,With
,SQL
from Production.Foo.dbo.Bar
set IDENTITY_INSERT Foo.dbo.Bar OFF
И я получаю сообщение об ошибке
Msg 8107, уровень 16, состояние 1, строка 1
IDENTITY_INSERT уже включен для таблицы 'Foo.dbo.Bar'. Невозможно выполнить операцию SET для таблицы "Foo.dbo.Bar".
Хмм..хорошо, поэтому IDENTITY_INSERT включен для таблицы. Поэтому я удалил SET IDENTITY_INSERT Foo.dbo.Bar ON
из верхней части моего запроса, а затем выполнил его, и я получил эту ошибку:
Msg 544, уровень 16, состояние 1, строка 1
Невозможно вставить явное значение для столбца идентификатора в таблице "Bar", если для параметра IDENTITY_INSERT установлено значение OFF.
Я могу выполнить SET IDENTITY_INSERT Foo.dbo.Bar OFF
весь день, но если я попытаюсь повернуть его ON
, тогда SQL Server 2012 говорит, что IDENTITY_INSERT
уже включен.