gpt4 book ai didi

sql-server - SQL Server : change primary key with related rows

转载 作者:行者123 更新时间:2023-12-02 19:16:17 26 4
gpt4 key购买 nike

我想更改与其他表有关系的表中一行的主键值:

例如

Table Person { Id, Name, +50 fields }
Table Address { Id, City, +10 fields }
Table Person2Address { Id, PersonId, AddressId }

我想更改 Person.Id 和 Person2Address.PersonId

我尝试这样的事情:

BEGIN TRANSACTION    
UPDATE Pers SET Id = NewId WHERE Id = OldId
UPDATE Person2Address SET PersonId = NewId WHERE PersonId = OldId
COMMIT TRANSACTION

但是它当然会带来冲突:)

如何暂时抑制外键约束或者是否有更好的方法来更改人员的 ID?

最佳答案

首先,更改主键值从来都不是一个好主意。您的主要关注点应该是尽力避免这种情况。

如果您无法消除更新主键值的需要,那么最好的选择是使用 ON UPDATE CASCADE 定义这两个表之间的外键关系,以便任何更改主表的主键会自动级联到子表。

为此,请删除现有的外键关系,然后添加:

 ALTER TABLE dbo.Person2Address
ADD CONSTRAINT FK_Person2Address_Person
FOREIGN KEY (PersonId) REFERENCES dbo.Person(Id)
ON UPDATE CASCADE

如果人员的 Id 发生变化,那么应该会自动更新 Person2Address 表的 PersonId 值。

现在您应该可以调用

UPDATE dbo.Person SET Id = NewId WHERE Id = OldId

这应该就是全部了!

关于sql-server - SQL Server : change primary key with related rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3177558/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com