Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 尝试将外键添加到现有表时出现模糊错误_Sql_Sql Server_Tsql_Sql Server 2008_Foreign Keys - Fatal编程技术网

Sql 尝试将外键添加到现有表时出现模糊错误

Sql 尝试将外键添加到现有表时出现模糊错误,sql,sql-server,tsql,sql-server-2008,foreign-keys,Sql,Sql Server,Tsql,Sql Server 2008,Foreign Keys,我需要在我的表中添加一个名为starList的新外键。它当前与名为planetList的表没有外键关系 所以我运行了这个命令: ALTER TABLE [dbo].[starList] WITH CHECK ADD CONSTRAINT [FK_starList_planetList] FOREIGN KEY([planetId]) REFERENCES [dbo].[planetList] ([planetId]) ON UPDATE

我需要在我的表中添加一个名为
starList
的新外键。它当前与名为
planetList
的表没有外键关系

所以我运行了这个命令:

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
但我得到了这个错误:

ALTER TABLE语句与外键约束“FK_starList_planetList”冲突。
冲突发生在数据库“astro101”、表“dbo.planetList”、列“planetID”中

我不知道那是什么意思

我尝试在SQL Server上查看我的表,但没有发现任何错误

有人能帮我弄清楚这个错误是什么意思吗

谢谢

我的
starList
表如下所示:

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
表如下所示:

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

您需要检查两列中的数据

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

starlist.planetid中的数据与planetlist.planetid不匹配/不对应

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

简言之,存在违反引用完整性规则的情况


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

您需要检查两列中的数据

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

starlist.planetid中的数据与planetlist.planetid不匹配/不对应

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

简言之,存在违反引用完整性规则的情况



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

在我看来,这个错误并不是特别模糊。它告诉您至少有一个现有行会导致外键约束失败,因此无法创建它您将得到不符合
约束的行。
。顺便说一句,SQL Server 2008已经完全不受支持一年多了,您应该尽快查看升级路径。@Larnu哦,哇,这很有意义!我从来不知道。我运行了那个查询,在我的starList表中发现了一堆planetID值,而planetList表中不存在这些值。我将删除并重新运行。你认为空值重要吗?因为starList中的planetId列默认为NULL。
NULL
值对于外键约束被忽略,@SkyeBoniwell。在我看来,这个错误并不特别模糊。它告诉您至少有一个现有行会导致外键约束失败,因此无法创建它您将得到不符合
约束的行。
。顺便说一句,SQL Server 2008已经完全不受支持一年多了,您应该尽快查看升级路径。@Larnu哦,哇,这很有意义!我从来不知道。我运行了那个查询,在我的starList表中发现了一堆planetID值,而planetList表中不存在这些值。我将删除并重新运行。你认为空值重要吗?因为starList中的planetId列默认为NULL。
NULL
值对于外键约束被忽略,@SkyeBoniwell。感谢您让我看看,您只需更新:update tbl set col=NULL;或删除并读取该列;改变表格下拉列x;改变表格,增加x列;哦,好的,比如:更新starList SET planetID=NULL,其中planetID不在…截断整个列,然后添加约束。所以没有where条件。谢谢你让我看看,你可以简单地更新:updatetblsetcol=null;或删除并读取该列;改变表格下拉列x;改变表格,增加x列;哦,好的,比如:更新starList SET planetID=NULL,其中planetID不在…截断整个列,然后添加约束。所以没有任何条件。