无法在具有三个主键的两个表之间创建关系

时间:2018-05-06 16:05:18

标签: sql-server

我最近使用 Microsoft SQL Server Migration Assistant for Oracle 通过两遍方法将Oracle数据库转换为SQL Server数据库。

有两个表ProxyRequests off ProxyPreserveHost on ProxyPass "/comms" "ws://localhost:1880/comms" ProxyPassReverse "/comms" "ws://localhost:1880/comms" ProxyPass "/" "http://127.0.0.1:1880/" ProxyPassReverse "/" "http://127.0.0.1:1880/" <Proxy *> Order deny,allow Allow from all </Proxy> BILL_INFO,它们应该通过复合PK具有主 - 细节关系。但是,当我尝试创建该关系时,我收到此错误:

  

'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_INFO_DETAILBILL_NUMBERPAY_MODE_ID(逐个),并在{{上搜索时找到两条记录1}}。我修复了它们,并确认CASHIER_IDBILL_NUMBER已按顺序排列。

但是,我无法建立这种关系。同样的错误。现在我想知道表之间的元组是否无效。如何找到仅存在于详细信息表中的复合键?

limitation

1 个答案:

答案 0 :(得分: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

使用复合键时,需要将所有列都检查为元组。