IDENTITY_INSERT ON не работает — SQL Server 2008 R2

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

Я использовал код SET IDENTITY_INSERT, чтобы убедиться, что столбец идентификаторов отключен, прежде чем выполнять вставку. Но почему-то он все еще выдает мне сообщение об ошибке:

Сообщение 8101, уровень 16, состояние 1, строка 3
Явное значение для столбца идентификаторов в таблице 'dbo.UI_PAGE' можно указать только в том случае, если используется список столбцов и параметр IDENTITY_INSERT включен.

Ниже мой запрос:

DELETE FROM [DB1].[dbo].[MY_TABLE] 

SET IDENTITY_INSERT [DB1].[dbo].[MY_TABLE] ON

INSERT INTO [DB1].[dbo].[MY_TABLE]
   SELECT *
   FROM  [DB2].[dbo].[MY_TABLE]

SET  IDENTITY_INSERT [DB1].[dbo].[MY_TABLE] OFF

Может ли кто-нибудь указать мне, какой шаг я делаю неправильно?

Большое спасибо!


person Smiley    schedule 27.06.2014    source источник


Ответы (2)


Вы должны указать все имена столбцов при вставке с IDENTITY INSERT ON при использовании INSERT INTO

INSERT INTO  [DB1].[dbo].[MY_TABLE](TabelID,Field1,Field2,Field3...)
SELECT * FROM  [DB2].[dbo].[MY_TABLE]

Если вы не знали, в ssms есть изящная маленькая хитрость. Если выбрать таблицу и развернуть ее узлы, вы скопируете ctrl-c в узел столбцов, и это поместит список имен полей с разделителями-запятыми в текстовый буфер буфера обмена.

person Ross Bush    schedule 27.06.2014
comment
И я бы даже рекомендовал всегда явно перечислять столбцы во всех ваших операторах INSERT И SELECT. Это немного больше, чем печатать заранее, но это позволяет избежать многих проблем и ошибок, которые трудно найти! - person marc_s; 28.06.2014

Дополнение к первому ответу, данному Россом Бушем. Если в вашей таблице много столбцов, чтобы получить имя этих столбцов с помощью этой команды.

SELECT column_name + ','
FROM   information_schema.columns 
WHERE  table_name = 'TableName'
for xml path('')

(после удаления последней запятой (',')) Просто скопируйте имя предыдущего столбца.

person Rousonur Jaman    schedule 10.09.2017