尝试向现有 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 之前创建外键。
我需要向我的 table 添加一个新的外键,名为 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
但是我得到这个错误:
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 之前创建外键。