SQL Server更新主键,它也是两个表中的外键

SQL Server update primary key that's also a foreign key in two tables

我需要更新记录的主键,但它也是另外两个表中的外键。 我还需要更新的主键也反映在子表中。

这是我的查询和错误:

1
2
begin tran
update question set questionparent = 10000, questionid= 10005 where questionid = 11000;
1
Error  9/4/2009 10:04:49 AM    0:00:00.000 SQL Server Database Error: The UPDATE statement conflicted with the REFERENCE constraint"FK_GoalRequirement_Question". The conflict occurred in database"numgmttest", table"dbo.GoalRequirement", column 'QuestionID'.   14  0

我不记得该怎么做这就是为什么我在这里。 有帮助吗?


你的人际关系是否正常

1
ON UPDATE CASCADE

如果他们正在更改主表中的键将更新外键。

例如

1
2
3
4
ALTER TABLE Books
ADD CONSTRAINT fk_author
FOREIGN KEY (AuthorID)
REFERENCES Authors (AuthorID) ON UPDATE CASCADE


你可以:

  • 暂时禁用强制执行FK约束(请参阅此处或此处)
  • 更新你的PK
  • 更新你的FK
  • 启用后台强制执行FK约束
  • 在事务中完成所有操作并确保如果事务失败,则将其正确回滚并仍然强制执行FK约束。

    但是......为什么你需要改变PK?我希望这是一个很少执行的动作(遗留数据导入或类似的东西)。


    如果要以图形方式设置Cascade规则,请在SQL Management Studio上设置Cascade Rule

  • 在设计模式下打开表
  • 单击顶部工具栏中的关系按钮
  • 选择所需的FK关系(逐个)
  • 右侧 - 展开INSERT或UPDATE规范
  • 将UPDATE规则更改为 - 级联
  • 关闭并保存,完成!

    (试过SQL 2008)


    由于我不太自信禁用FK约束,我也更喜欢:

  • 使用旧PK将行复制为具有新PK的行
  • 更新FK
  • 删除旧PK的行
  • 优点:在此过程中没有违反约束。


    转到每个子表的外键关系以及插入和更新规范更改删除和更新规则以级联。这可能对你有所帮助