如何更新2个具有外键的表中的2列

Sun*_*ise 5 sql foreign-keys sql-server-2008

我知道之前已经问过如何在SQL中更新多个表的问题,并且常见的答案似乎是在事务中单独进行.

但是,我需要更新的2列有一个外键,因此无法单独更新.

例如

Table1.a是Table2.a的外键

表中的一个条目是错误的,例如,两列都是'xxx',应该是'yyy'

如何将Table1.a和Table2.a更新为'yyy'?

我知道我可以暂时取下钥匙并更换,但肯定还有另一种方法.

谢谢

Gar*_*thD 10

您无法同时执行更新,但可以强制SQL执行更新.您需要确保外键具有引用触发操作ON UPDATE CASCADE

例如

ALTER TABLE YourTable
ADD CONSTRAINT FK_YourForeignKey
FOREIGN KEY (YourForeignKeyColumn) 
REFERENCES YourPrimaryTable (YourPrimaryKeyColumn) ON UPDATE CASCADE
Run Code Online (Sandbox Code Playgroud)


HLG*_*GEM 6

我不喜欢级联更新,所以我建议采用不同的路线。

首先,您不更新父表,而是添加一条具有所需值的新记录(并且所有其他字段的数据与其他记录相同)。然后,您可以毫无困难地更新子表以使用该值而不是该值。此外,您现在可以批量完成工作,以避免在更改通过系统传播时锁定系统。一旦所有子表都被更新,您就可以删除原来的坏记录。