Невозможно создать связь между двумя таблицами с тремя первичными ключами

Недавно я использовал Microsoft SQL Server Migration Assistant для Oracle для преобразования базы данных Oracle в базу данных SQL Server с помощью двухпроходного подхода.

Есть две таблицы, BILL_INFO а также BILL_INFO_DETAIL, которые должны иметь отношение мастер-деталь через композитный ПК. Однако, когда я пытаюсь создать это отношение, я получаю эту ошибку:

Таблица 'BILL_INFO' успешно сохранена Таблица 'BILL_INFO_DETAIL' - Невозможно создать связь 'FK_BILL_INFO_DETAIL_BILL_INFO'. Оператор ALTER TABLE конфликтует с ограничением FOREIGN KEY "FK_BILL_INFO_DETAIL_BILL_INFO". Конфликт произошел в базе данных "MyDatabase", таблица "dbo.BILL_INFO".

База данных страдает от плохих данных. Поэтому я сделал основной поиск в таблице подробностей, чтобы найти BILL_NUMBER, PAY_MODE_ID, а также CASHIER_ID которые могут не существовать в master (одна за другой) и нашли две записи при поиске на BILL_NUMBER, Я исправил их, а также убедился, что PAY_MODE_ID а также CASHIER_ID были в порядке.

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

введите описание изображения здесь

1 ответ

Решение

Вы можете проверить наличие несуществующих значений, используя:

SELECT bill_number, pay_mode_id, cashier_id
FROM Bill_Info_Detail
EXCEPT
SELECT bill_number, pay_mode_id, cashier_id
FROM Bill_Info;
-- and then fix missing data

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

Другие вопросы по тегам