【问题标题】:Foreign key linked with primary key in same table外键与同一张表中的主键链接
【发布时间】:2017-09-18 15:01:36
【问题描述】:

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

错误信息是

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

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

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

【问题讨论】:

  • 错误是(我相信)告诉您表中已有数据不符合您的 FK 约束。您需要先修复数据。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    在孤立值的情况下,第一次出现的错误标签中会提供孤立值。

    查看您尝试执行的代码肯定会有所帮助。 下面是一个有效的表定义:

    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
    )
    

    【讨论】:

    • ParentId 必须可以为空。因为根类没有父类
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 2018-11-20
    • 2013-02-08
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    相关资源
    最近更新 更多