当我尝试更改表以添加外部约束时,它将引发以下错误
信息547,级别16,状态0,第1行
ALTER TABLE语句与FOREIGN KEY SAME TABLE约束“ FK_ManagerId”冲突。在数据库“ MX_STAG”的表“ dbo.Sales_US_User”的“ ID”列中发生了冲突。
我尝试了以下查询,但没有一个起作用。
ALTER TABLE SALES_US_USER
ADD CONSTRAINT FK_ManagerId
FOREIGN KEY (ManagerID) REFERENCES SALES_US_USER(id);
ALTER TABLE SALES_US_USER
ADD FOREIGN KEY (ManagerID) REFERENCES SALES_US_USER(id);
请帮助
答案 0 :(得分:2)
您已经正确设置了DDL。该错误告诉您,您有一个带有ManagerId的行,该行未映射到ID。 EG
use tempdb
go
drop table if exists sales_us_manager
go
create table sales_us_user(Id int primary key, ManagerId int)
insert into sales_us_user(id,managerId) values (1,2)
ALTER TABLE SALES_US_USER
ADD CONSTRAINT FK_ManagerId
FOREIGN KEY (ManagerID) REFERENCES SALES_US_USER(id);
--Msg 547, Level 16, State 0, Line 12
--The ALTER TABLE statement conflicted with the FOREIGN KEY SAME TABLE constraint "FK_ManagerId". The conflict occurred in database "tempdb", table "dbo.sales_us_user", column 'Id'.
select *
from SALES_US_USER
where ManagerId not in
(select id from SALES_US_USER )
答案 1 :(得分:0)
使用无效的ManagerId查找并更新行之后,该问题得到解决,然后创建了约束。
答案 2 :(得分:0)
在使用新迁移更新数据库之前,您需要删除两个表数据。在表中添加FK(外键)而表中的任何一个都包含数据时,这是常见的错误之一。之所以会出现约束,是因为FK不能为空,并且在添加新迁移时,数据库发现将要创建的新列将为空,因此,请首先删除两个表中的数据。