У меня есть следующий код SQL для вставки данных из одной таблицы в другую путем сравнения данных в двух таблицах. ПК в таблице назначения - [bomItem], [bomRev], [bomEntry]
.Вставить заявление для вставки данных из одной таблицы в другую
Я хочу вставить, если ItemID in source table = bomItem field in Dest. table
И[rev](field in Source tbl)NOT=[bomRev](in destination tbl)
.
Когда я попытался запустить скрипт я получаю следующую ошибку
Msg 547, Level 16, State 0, строка 46 Инструкция INSERT заявление противоречит ограничение внешнего ключа "FK_MIBOMD_MIBOMH". Конфликт произошел в базе данных «MITESTCO», таблица «dbo.MIBOMH». Заявление было прекращено.
USE [MITESTCO];
GO
INSERT INTO [MIBOMD]
([bomItem], [bomRev], [bomEntry], [partId], [qty],[lead])
SELECT [ItemID], [rev], [bomEntry], [partid], [qty],[lead]
FROM [assy]
WHERE [rev] IN (SELECT [bomRev] FROM [MIBOMH])
AND [ItemID] IN (SELECT [bomItem] FROM [MIBOMH])
AND [ItemID] IN (SELECT [ItemID] FROM [MIITEM])
AND [partid] IN (SELECT [ItemID] FROM [MIITEM]);
Ошибка не имеет никакого прямого отношения к запросу, но структура проектирования базы данных столы. Поскольку ошибка говорит, что нарушается ограничение внешнего ключа, которое по имени может включать таблицу добавления 'dbo.MIBOMD' с' dbo.MIBOMH'. Возможно, у вас есть одно-коллиевое соотношение между этими двумя (родительский/дочерний) и добавляются в дочерние записи, что позволяет связать родительский идентификатор NULL. – Parfait
@Parfait Спасибо! Да, у меня есть отношения «один ко многим», и у меня есть те же данные/запись в родительском и дочернем, что только d/c - это поле 'rev'. Первичные ключи в родительских таблицах - 'bomRev' и' bomItem'. Как я могу разрешить это, вы сказали, что освобождение Но я не знаю, как эта работа Можете ли вы объяснить мне больше? – Kin
Проверьте свои ограничения: http://stackoverflow.com/questions/2499332/how-to-check-if-a-constraint-exists-in-sql-server – Parfait