【发布时间】:2016-10-19 22:21:51
【问题描述】:
我对外键有一个奇怪的问题。我正在尝试执行以下查询:
ALTER TABLE [GroupMember] FOREIGN KEY ([Group]) REFERENCES [Group]([GUID])
这给了我以下错误:
ALTER TABLE 语句与 FOREIGN KEY 约束“FK__GroupMember__Group__0D25C822”冲突。冲突发生在数据库“x”、表“dbo.Group”、列“GUID”中。
然后我验证了现有的东西,我已经确认一切正常:
- 引用的表 (dbo.Group) 在 [GUID] 列上有一个已定义的主键
- 引用表 (dbo.GroupMember) 没有 [Group] 值,这些值在 dbo.Group-table 的 [GUID] 列中不存在
- 不存在类似的引用外键
从这里开始,我进行了实验。取一些行进出,擦拭表格,截断表格。到目前为止我可以得出的结论:
- 如果我使用
DELETE FROM [GroupMember];擦除引用表然后尝试应用 FK 约束,我会收到相同的错误消息 - 如果我使用
TRUNCATE TABLE [GroupMember];截断引用表,我可以应用FK 约束而不会出错。此外,我可以在应用 FK 约束后重新插入完全相同的数据,而不会出现问题。
由此我可以得出结论,数据本身不是问题。任何人都可以理解这一点吗?为什么我可以在截断表后应用约束,但在删除所有记录后不能应用约束?
【问题讨论】:
-
您是否尝试将
WITH NOCHECK选项与alter table语句一起使用? -
嘿托德。如果我使用 NOCHECK 提示添加约束,它会起作用。
-
您的列是否允许 NULL 值?
-
嗨,Woozar。引用列是可为空的,被引用列是具有聚集 PK 的不可为空列。我已经尝试删除所有带有 NULL 的引用列,但它没有帮助。
标签: sql constraints sql-server-2016