2016-04-30 6 views
0

У меня есть следующий код 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]); 
+0

Ошибка не имеет никакого прямого отношения к запросу, но структура проектирования базы данных столы. Поскольку ошибка говорит, что нарушается ограничение внешнего ключа, которое по имени может включать таблицу добавления 'dbo.MIBOMD' с' dbo.MIBOMH'. Возможно, у вас есть одно-коллиевое соотношение между этими двумя (родительский/дочерний) и добавляются в дочерние записи, что позволяет связать родительский идентификатор NULL. – Parfait

+0

@Parfait Спасибо! Да, у меня есть отношения «один ко многим», и у меня есть те же данные/запись в родительском и дочернем, что только d/c - это поле 'rev'. Первичные ключи в родительских таблицах - 'bomRev' и' bomItem'. Как я могу разрешить это, вы сказали, что освобождение Но я не знаю, как эта работа Можете ли вы объяснить мне больше? – Kin

+1

Проверьте свои ограничения: http://stackoverflow.com/questions/2499332/how-to-check-if-a-constraint-exists-in-sql-server – Parfait

ответ

0

Чтобы отключить все ограничения в базе данных -

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" 

-- Insert data 

Чтобы включить их обратно -

exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all" 
Смежные вопросы