Запрос INSERT INTO SELECT с ограничением внешнего ключа не работает на SQL сервере - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь скопировать данные из производственной базы данных в разрабатываемую. Имя производственной базы данных - GRIT, а разработка - GRIT_Prod_Test.

В этой задаче связаны две таблицы: одна - Location, другая - MinorStructures. Location.Id - внешний ключ к MinorStructures.PointId. Я заполнил таблицу Location данными от производства до разработки. Теперь я использую запрос INSERT INTO SELECT для заполнения таблицы MinorStructures.

Это код:

INSERT INTO GRIT_Prod_Test.dbo.MinorStructures ([PointId]) 
    SELECT [PointId] 
    FROM GRIT.dbo.MinorStructures

Я получаю эту ошибку:

Оператор INSERT конфликтует с ограничением FOREIGN KEY «FK_MinorStructures_ToLocationPoint». Конфликт произошел в базе данных «GRIT_Prod_Test», таблице «dbo.LocationPoint», столбце «Id».

Итак, как я могу использовать запрос INSERT INTO SELECT для ограничения внешнего ключа. Или в чем может быть причина этой проблемы? Любая помощь очень ценится. Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

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

вот так:

>

--Table Brands
insert into Brands(Id, BrandName) values(2020, 'Chevrolet')

--Table Cars
insert into Cars(id, MarkId, CarName) values(1, 2021, 'Corvette')

ForeignKey 2021 не существует.

0 голосов
/ 16 июня 2020

Решил. Проблема заключалась в том, что в моем комментарии упоминается, что запись с идентификатором 10 в производстве недоступна, поэтому запись с идентификатором 11 в производстве стала записью с идентификатором 10 в базе данных разработки. Поэтому я использовал IDENTITY_INSERT в таблице LocationPoint при разработке и также вставил значения столбца ID от производства к разработке. Затем, когда я скопировал записи в MinorStructure, это сработало.

...