Изменение записи в таблице (sql server) с внешними ключами? - PullRequest
1 голос
/ 28 апреля 2009

Кто-нибудь знает, есть ли более быстрый способ редактирования записи с внешними ключами в таблице (на сервере sql) ... Я объясню ... У меня есть около 5 таблиц, которые имеют собственный идентификатор, но связаны между собой с помощью внешний ключ ...

Следовательно, мне нужно было изменить внешний ключ (номер контракта в моем случае), но мне пришлось скопировать каждую запись в новую запись и отредактировать ее таким образом ...

Как будто я пытаюсь отредактировать номер контракта, он дает мне стандартную ошибку связывания и нарушает внешний ключ и т. Д.

Неужели должен быть лучший способ?

ЛЮБЫЕ идеи?

Ответы [ 3 ]

3 голосов
/ 28 апреля 2009

Вы говорите об изменении PK и обновлении всех Fks? В этом случае включите каскадные обновления, и это будет сделано автоматически то же самое с удалениями, вы включаете каскадное удаление

НА УДАЛЕННОМ КАСКАДЕ

Указывает, что при попытке удалить строку с ключом, на который ссылаются внешние ключи в существующих строках в других таблицах, все строки, содержащие эти внешние ключи, также удаляются. Если каскадные ссылочные действия также были определены в целевых таблицах, указанные каскадные действия также выполняются для строк, удаленных из этих таблиц.

ОБНОВЛЕНИЕ КАСКАДА

Указывает, что если предпринята попытка обновить значение ключа в строке, где на значение ключа ссылаются внешние ключи в существующих строках других таблиц, все значения внешнего ключа также обновляются до нового значения, указанного для ключ. Если каскадные ссылочные действия

3 голосов
/ 28 апреля 2009

Я не эксперт по SQL, но вы не можете установить что-то вроде ON UPDATE CASCADE для автоматического обновления внешнего ключа при изменении первичного ключа?

0 голосов
/ 28 апреля 2009

Или попробуйте отключить ограничение целостности, внесите изменения и попытайтесь повторно включить ограничение. По сути, если вы не сделали это правильно, вы получите ошибку (не можете включить ограничение, которое будет нарушено).

...