在同一个表中与主键链接的外键

时间:2013-06-07 14:49:18

标签: sql-server sql-server-2012 foreign-key-relationship

我有一个表Categories,其中列Id, ParentId(对于“子类别”,可以有任何级别的嵌套)和其他一些。使用SQL Server 2012我无法在同一个表FK_Categories_CategoriesId -> ParentId)中创建外键。

错误讯息是

  

'类别'表格    - 无法创建关系'FK_Categories_Categories'。 ALTER TABLE语句与FOREIGN KEY SAME TABLE约束“FK_Categories_Categories”冲突。冲突发生在数据库“pokupaykadb”,表“dbo.Categories”,列'Id'。

需要级联删除子类别。什么解决方案可以?最好是某个属性,例如通过外键从另一个表中删除级联

http://i.stack.imgur.com/kXiMS.png

2 个答案:

答案 0 :(得分:4)

如果存在不符合约束条件的孤立记录 - 在创建外键之前删除它们。

通常,很少有记录不符合新约束,并且DBMS不允许创建约束。

答案 1 :(得分:0)

在孤立值的情况下,第一次出现在错误标签中,并带有孤立的值。

这肯定有助于查看您尝试执行的代码。 以下是有效的表定义:

CREATE TABLE dbo.Categories
(
    Id int NOT NULL IDENTITY(-2147483648, 1)
        CONSTRAINT PK_Categories PRIMARY KEY
    , ParentId int NOT NULL
        CONSTRAINT FK_Categories_ParentId
        FOREIGN KEY (ParentId) REFERENCES dbo.Categories
)