【发布时间】:2012-10-26 17:54:39
【问题描述】:
我继承了一个设计不佳的旧数据库。它是一个 Sql Server 2008 数据库,缺少很多外键关系。下面显示了两个表,我正在尝试在 dbo.app_status.status_id 和 dbo.app_additional_info.application_id
之间手动创建 FK 关系我在尝试使用下面的查询创建关系时使用 SQL Server Management Studio
USE myDatabase;
GO ALTER TABLE dbo.app_additional_info
ADD CONSTRAINT FK_AddInfo_AppStatus FOREIGN KEY (application_id)
REFERENCES dbo.app_status (status_id)
ON DELETE CASCADE
ON UPDATE CASCADE ;
GO
但是,我在运行查询时收到此错误
ALTER TABLE 语句与 FOREIGN KEY 约束冲突 “FK_AddInfo_AppStatus”。数据库发生冲突 “myDatabase”,表“dbo.app_status”,列“status_id”。
我想知道查询是否因为每个表已经包含大约 130,000 条记录而失败?
请帮忙。
谢谢。
【问题讨论】:
-
我看到已经有外键了,你能先把现有的 fk 去掉吗?
-
@Larry 我正在尝试将 fk 添加到 dbo.app_additional_info 表中
-
与 FOREIGN KEY 约束“FK_AddInfo_AppStatus”冲突,而您尝试创建的 FK 名称为“FK_AddInfo_AppStatus”,是不是因为这个?
-
我大胆猜测问题出在数据上。子表中可能有一些记录在父表中没有匹配的 ID。尝试运行:
SELECT application_id FROM app_additional_info WHERE application_id NOT IN (SELECT status_id FROM app_status); -
@SchmitzIT 谢谢。很有帮助。
标签: sql sql-server sql-server-2008 foreign-keys