Невозможно создать связь между двумя таблицами с тремя первичными ключами
Недавно я использовал 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
При использовании составного ключа необходимо проверить все столбцы как кортежи.