0

Я хочу заполнить 5000 записей в нижнем формате для конкретной таблицы.Вставить записи с нарушениями в SQL Server

Insert into @Table 
(c1,c2,c3,c4,c5) 
Values 
(1,2,3,4,5), 
(2,2,3,4,5), 
(3,2,3,4,5), 
(4,2,3,4,5), 
(5,2,3,4,5) 
.... 
.... 
Up to 1000 rows 

Когда я пытаюсь выполнить его. Я получил нарушение внешнего ключа. Я знаю причину, поскольку одно из значений не было в соответствующей родительской таблице.

Существует несколько записей, вызывающих это нарушение. Очень сложно найти эти нарушенные строки среди 1000 строк, поэтому я хочу вставить по крайней мере допустимые записи в мою целевую таблицу, оставив по-прежнему нарушенные строки.

Я не уверен, как это выполнить. Пожалуйста, предложите мне любые идеи для этого.

+0

В каком столбце есть внешний ключ –

+2

Просто отфильтруйте записи перед вставкой, которые не являются частью вашей родительской таблицы. –

ответ

0

Если это один раз вещь, то вы можете сделать следующее:

Отбросьте FK ограничение

ALTER TABLE MyTAble 
    DROP CONSTRAINT FK_Contstraint 
GO 

Выполнить ВСТАВИТЬ

Найти записи с не соответствующий идентификатор родительского.

SELECT * FROM MyTable MT WHERE NOT EXISTS (SELECT 1 FROM ParentTable PT WHERE MT.ParentId = PT.ID) 

УДАЛИТЬ эти записи или сделать что-то еще с ними.

Восстановить ограничение FK.

+0

'insert into table ... SELECT * FROM MyTable MT WHERE EXISTS (SELECT 1 FROM ParentTable PT WHERE MT.ParentId = PT .ID) 'Этот сохранит оставшиеся четыре шага –

+0

Спасибо за идею marko – StackUser

0

Отключите внешний ключ или исправьте данные.

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

Смежные вопросы