如何解决尝试将外键添加到现有表时出现模糊错误
我需要向表中添加一个名为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语句与FOREIGN KEY约束“ 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,ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
解决方法
您需要检查两列中的数据。
外键表的列中有一个值,其值在主键表中不存在。
您在starlist.planetid中包含的数据与planetlist.planetid不匹配/相对应。
两个值都必须与value值相同。最好截断它们,然后尝试创建约束。
简而言之,存在违反参照完整性规则的情况。
在这种情况下,请记住在填充表之前创建外键。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。