Прежде всего, изменение значения первичного ключа никогда не является хорошей идеей. Ваша главная цель должна состоять в том, чтобы попытаться избежать этого всеми средствами.
Если вы не можете устранить необходимость обновления значения первичного ключа, то лучше всего было бы определить отношение внешнего ключа между этими двумя таблицами для использования ON UPDATE CASCADE
, чтобы любые изменения первичного ключа основной таблицы автоматически каскадно спуститься к дочернему столу.
Чтобы сделать это, удалите существующую связь с внешним ключом и добавьте:
ALTER TABLE dbo.Person2Address
ADD CONSTRAINT FK_Person2Address_Person
FOREIGN KEY (PersonId) REFERENCES dbo.Person(Id)
ON UPDATE CASCADE
Это должно затем автоматически обновить значение PersonId
таблицы Person2Address
, если Id
на человеке изменится.
Теперь вы можете просто позвонить
UPDATE dbo.Person SET Id = NewId WHERE Id = OldId
и это должно быть все, что есть!