我有一个名为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)
希望这可以帮助
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)
当您尝试访问Insert/Update一个实体,而foreign key您尝试访问的实体Insert/Update实际上并不存在时,有时会发生这种情况。因此,请确保foreign key存在并重试。