Установить IDENTITY_INSERT ON не работает
Я хочу скопировать таблицу Equipment
из одной базы данных MyDBQA
в нашу тестовую базу данных MyDB
. В таблице есть столбец идентификатора, который является первичным ключом (int, а не null).
Но у меня есть ошибка:
Msg 8101, уровень 16, состояние 1, строка 2
Явное значение для столбца идентификации в таблице "MyDB.dbo.Equipment" может быть указано только при использовании списка столбцов и IDENTITY_INSERT включен.
Мой script:
SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] ON
INSERT INTO [MyDB].[dbo].[Equipment] SELECT * FROM [MyDBQA].[dbo].[Equipment]
SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] OFF
Ответы
Ответ 1
Возможно, вам просто не хватает списка столбцов, как говорится в сообщении
SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] ON
INSERT INTO [MyDB].[dbo].[Equipment]
(COL1,
COL2)
SELECT COL1,
COL2
FROM [MyDBQA].[dbo].[Equipment]
SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] OFF
Ответ 2
Соответствующая часть сообщения об ошибке
...when a column list is used...
Вы не используете список столбцов, вы используете SELECT *
. Вместо этого используйте список столбцов:
SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] ON
INSERT INTO [MyDB].[dbo].[Equipment] (Col1, Col2, ...)
SELECT Col1, Col2, ... FROM [MyDBQA].[dbo].[Equipment]
SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] OFF
Ответ 3
Здесь Microsoft пишет об использовании SET IDENTITY_INSERT, что может быть полезно для других, видящих это сообщение, если они, как и я, нашли это сообщение при попытке воссоздать удаленные записи, сохраняя при этом исходное значение столбца идентификатора.
для воссоздания удаленных записей с исходным значением столбца идентификатора:
http://msdn.microsoft.com/en-us/library/aa259221(v=sql.80).aspx
Ответ 4
В коде VB при попытке отправить запрос INSERT
вы должны отправить двойной запрос в том же "executenonquery", как это:
sqlQuery = "SET IDENTITY_INSERT dbo.TheTable & " ON; " & "INSERT INTO dbo.TheTable blah, blah...;"
Я использовал разделитель ;
вместо GO.
Работает для меня. Поздно, но эффективно!