更新时出现Sql错误:UPDATE语句与FOREIGN KEY约束冲突

cho*_*abs 22 sql-server

我有一个名为table的表patient_address,它在patient表中引用了一个PK键.但是,如果我尝试运行以下语句之一:

update patient set id_no='7008255601088' where id_no='8008255601088'
update patient_address set id_no='7008255601088' where id_no='8008255601088'
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:

"UPDATE语句与REFERENCE约束冲突"FK__patient_a__id_no__27C3E46E".冲突发生在数据库"PMS",表"dbo.patient_address",列'id_no'." 或"UPDATE语句与FOREIGN KEY约束冲突"FK__patient_a__id_no__27C3E46E".冲突发生在数据库"PMS",表"dbo.patient",列'id_no'." .

有没有人知道可能的原因?谢谢.

Mil*_*dic 45

更新表的主键时会遇到此错误,但是来自另一个表的外键引用该错误,并且特定于更新的设置为"无操作".No操作是默认选项.

如果是这种情况并且在更新操作上未设置任何操作,则可以将外键定义更改为Cascade.

右键单击外键,然后选择" 修改".在INSERT和UPDATE细节下的外键关系对话框中,在Cascade上设置UPDATE规则:

在此输入图像描述

您还可以使用T-SQL设置规则:

ALTER TABLE YourTable
DROP Constraint Your_FK
GO

ALTER TABLE YourTable
ADD CONSTRAINT [New_FK_Constraint]
FOREIGN KEY (YourColumn) REFERENCES ReferencedTable(YourColumn)
ON DELETE CASCADE ON UPDATE CASCADE
GO 
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助

  • 我在这里建议你设置'ON DELETE CASCADE ON UPDATE CASCADE'.我仍然得到同样的错误.你有什么主意吗? (4认同)

Bar*_*ann 13

如果不想更改表结构,可以运行以下查询:

ALTER TABLE [UserStore] 
NOCHECK CONSTRAINT FK_UserStore_User_UserId

ALTER TABLE [UserIdentity]
NOCHECK CONSTRAINT  FK_UserIdentity_User_UserId

BEGIN TRAN

UPDATE  [user] 
SET Id = 10
WHERE Id = 9

UPDATE  [dbo].[UserStore]
SET UserId = 10
WHERE UserId = 9

UPDATE  [dbo].UserIdentity
SET UserId = 10
WHERE UserId = 9

COMMIT TRAN

ALTER TABLE [UserStore] 
CHECK CONSTRAINT FK_UserStore_User_UserId

ALTER TABLE UserIdentity 
CHECK CONSTRAINT FK_UserIdentity_User_UserId
Run Code Online (Sandbox Code Playgroud)


Mas*_*ian 5

当您尝试访问Insert/Update一个实体,而foreign key您尝试访问的实体Insert/Update实际上并不存在时,有时会发生这种情况。因此,请确保foreign key存在并重试。