1

考虑我们有两个表 ProductType 和 ProductSizeGroup 如下

产品类别

Id 
Name
MaleSizeGroupId
FemaleSizeGroupId
ChildSizeGroupId

产品尺寸组

Id
Name

每个 MaleSizeGroupId、FemaleSizeGroupId 和 ChildSizeGroupId 字段都应该是 ProductSizeGroup.Id 的 FK。

我使用以下语句添加一个:

ALTER TABLE [dbo].[ProductType]  
WITH CHECK ADD CONSTRAINT
    [FK_ProductType_ProductSizeGroup_Male] FOREIGN KEY([MaleGroupId]) 
    REFERENCES [dbo].[ProductSizeGroup] ([Id])

这工作正常。我尝试添加下一个使用

ALTER TABLE [dbo].[ProductType]
WITH CHECK ADD CONSTRAINT
    [FK_ProductType_ProductSizeGroup_Female] FOREIGN KEY([FemaleGroupId]) 
    REFERENCES [dbo].[ProductSizeGroup] ([Id])

但我得到了错误:

ALTER TABLE 语句与 FOREIGN KEY 约束“FK_ProductType_ProductSizeGroup_Female”冲突。冲突发生在数据库“dbname”、表“dbo.ProductSizeGroup”、列“Id”中。

所以有冲突..但是什么冲突?我应该寻找什么?

4

1 回答 1

2

这只是意味着:表中的某些行的列中的值ProductType在引用的表 ( )中不存在。FemaleGroupIdProductSizeGroup

这本身不是问题——你完全可以有多个列从一个表到另一个表。

问题出在现有数据上——那里有不符合 FK 约束的数据。修复该数据,您应该会没事的。

要查找那些有问题的行,请使用如下查询:

SELECT * 
FROM [dbo].[ProductType]
WHERE FemaleGroupId NOT IN (SELECT DISTINCT Id FROM [dbo].[ProductSizeGroup])

这将列出所有违规行 - 更新它们的属性并重新开始!

于 2012-04-14T18:11:51.830 回答