尝试向现有 table 添加外键时出现模糊错误

Vague error when trying to add a foreign key to an existing table

我需要向我的 table 添加一个新的外键,名为 starList。它目前与名为 planetList.

的 table 没有外键关系

所以我运行这个命令:

ALTER TABLE [dbo].[starList] WITH CHECK 
    ADD CONSTRAINT [FK_starList_planetList] 
        FOREIGN KEY([planetId]) REFERENCES [dbo].[planetList] ([planetId])
                ON UPDATE CASCADE
                ON DELETE CASCADE
GO

但是我得到这个错误:

The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_starList_planetList".
The conflict occurred in database "astro101", table "dbo.planetList", column 'planetID'.

我不确定那是什么意思。

我试着在 SQL 服务器上查看我的 table,但我没有发现任何错误。

谁能帮我弄清楚这个错误是什么意思?

谢谢!

我的 starList table 看起来像这样:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[starList]
(
    [starID] [nvarchar](50) NOT NULL,
    [galaxyID] [uniqueidentifier] NOT NULL,
    [starTitle] [nvarchar](3000) NULL,
    [planetID] [uniqueidentifier] NULL,

    CONSTRAINT [PK_StarList] 
        PRIMARY KEY CLUSTERED ([starID] ASC)
                    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
                          IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
                          ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

ALTER TABLE [dbo].[starList] WITH CHECK 
    ADD CONSTRAINT [FK_starList_galaxyList] 
        FOREIGN KEY([galaxyID]) REFERENCES [dbo].[galaxyList] ([galaxyID])
                ON UPDATE CASCADE
                ON DELETE CASCADE
GO

ALTER TABLE [dbo].[starList] CHECK CONSTRAINT [FK_starList_galaxyList]
GO

planetList table 是这样的:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[planetList]
(
    [planetID] [uniqueidentifier] NOT NULL,
    [planetText] [nvarchar](max) NULL,

    PRIMARY KEY CLUSTERED ([planetID] ASC)
                WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
                      IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
                      ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

您需要检查两列中的数据。

外键 table 的列中有一个值,其关联值在主键 table 中不存在。

您在 starlist.planetid 中有数据 match/correspond 到 planetlist.planetid。

两者的值必须相同。最好截断它们然后尝试创建约束。

简而言之,违反了引用完整性规则。

如果是这种情况,请记住在填充 table 之前创建外键。