Вот моя проблема: у Меня есть 2 таблицы:
|ID|OTHER_STAF|
, где идентификатор является первичным ключом|FPK|ID|SOMETHING_ELSE|
, где комбинация, FPK и идентификатор делают первичный ключ и также идентификатор, является внешним ключом, на который ссылаются к WORKER.ID (не пустой, и должен иметь то же значение как в РАБОЧЕМ).Я хочу сделать хранимую процедуру UPDATE_ID_WORKER, где я хотел бы изменить значение определенного идентификатора в РАБОЧЕМ, и также во всех экземплярах определенного значения идентификатора в ФИРМЕ.
хранимая процедура:
........ @id..????........
На самом деле вы не должны этого делать, а вместо этого вставьте новую запись и обновите ее таким образом.
Но, если вам действительно нужно, вы можете сделать следующее:
ALTER TABLE foo WITH NOCHECK CONSTRAINT ALL
) Когда вы сочтете необходимым обновить значение первичного ключа, а также все совпадающие внешние ключи, то необходимо исправить весь дизайн.
Сложно каскадировать все необходимые изменения внешних ключей. Рекомендуется никогда не обновлять первичный ключ, и если вы сочтете это необходимым, вы должны использовать Суррогатный первичный ключ
, который является ключом, не полученным из данных приложения. В результате его значение не связано с бизнес-логикой и никогда не должно изменяться (и должно быть невидимым для конечного пользователя). Затем вы можете обновить и отобразить какой-либо другой столбец.
например:
BadUserTable
UserID varchar(20) primary key --user last name
other columns...
когда вы создаете множество таблиц, у которых есть FK to UserID, чтобы отслеживать все, над чем работал пользователь, но затем этот пользователь женится и хочет, чтобы идентификатор совпадал с его новой фамилией, вы повезло.
GoodUserTable
UserID int identity(1,1) primary key
UserLogin varchar(20)
other columns....
Теперь вы FK суррогатного первичного ключа для всех других таблиц и отображаете UserLogin, когда это необходимо, позволяя им входить в систему, используя это значение, а когда им нужно изменить его, вы меняете его только в одном столбце одной строки.
Не обновляйте первичный ключ. Это может вызвать множество проблем с сохранением данных, если на него ссылаются другие таблицы.
В идеале, если вам нужно уникальное поле, которое можно обновлять, создайте новое поле.