У меня есть две базы данных, которые содержат все те же таблицы. Итак, я пытаюсь скопировать данные из одной таблицы в одной базе данных в ту же таблицу в другой базе данных.
Я получаю сообщение об ошибке «В базе данных уже есть объект с именем PayComponents».
Не уверен в другом способе добиться того, что я хочу
SELECT * INTO [PSD2394].DBO.PayComponents
FROM [PSD1346].DBO.PayComponents
WHERE PCompID != 1 AND PCompID != 2
Ожидаемый результат — все записи из БД — PSD1346, за исключением случаев, когда PCompID = 1 и 2 вставлены в таблицу PayComponents в БД — PSD2394
@Отметка . . . Удалите таблицу перед ее повторным созданием.
@GordonLinoff .. Извините, не думаю, что это мудрый шаг. эта таблица уже существует с данными в ней, если бы я удалил таблицу, это могло бы иметь негативные последствия. Я просто пытаюсь вставить данные в эту таблицу. нет ли другого пути?
@Larnu теперь я получаю эту ошибку ... Явное значение для столбца идентификаторов в таблице «PSD2394.DBO.PayComponents» может быть указано только тогда, когда используется список столбцов и IDENTITY_INSERT включен.
Вам нужно указать, какие поля вставлять, а не включать столбец идентификаторов. Смотрите мой ответ для примера
@GuidoG Хорошо, попробуем. Спасибо за ответ. Я дам Вам знать.
SELECT INTO будет создавать новую таблицу каждый раз, если это то, что вы хотите, вам нужно сначала удалить эту таблицу.
Чтобы добавить в существующую таблицу, вам нужно использовать для этого INSERT INTO SELECT, как в этом примере.
INSERT * INTO [PSD2394].DBO.PayComponents (column names...)
SELECT pc.column names...
FROM [PSD1346].DBO.PayComponents pc
WHERE pc.PCompID != 1
AND pc.PCompID != 2
Если первичный ключ [PSD2394].DBO.PayComponents
является полем идентификации, вы не можете скопировать его, потому что база данных не позволит вам записать собственное значение в поле идентификации.
Если вам это действительно нужно, попробуйте это
SET IDENTITY_INSERT [PSD2394].DBO.PayComponents ON
do the insert statement here...
SET IDENTITY_INSERT [PSD2394].DBO.PayComponents OFF
Большое спасибо. SET IDENTITY_INSERT сработал. Это сэкономило так много ручного ввода данных. Еще раз большое спасибо.
Не используйте синтаксис
SELECT ...INTO
useINSERT INTO...SELECT ...FROM
.SELECT...INTO
синтаксис попытается создать объект, и если он уже существует, произойдет ошибка (как здесь).INSERT INTO...
синтаксис вставляет данные в существующий объект,