Первичный ключ обновления SQL Server, который также является внешним ключом в двух таблицах
Мне нужно обновить первичный ключ для записи, но это также внешний ключ в двух других таблицах. И мне нужен обновленный первичный ключ, который также будет отображаться в дочерних таблицах.
Вот мой запрос и ошибка:
begin tran
update question set questionparent = 10000, questionid= 10005 where questionid = 11000;
Error 9/4/2009 10:04:49 AM 0:00:00.000 SQL Server Database Error: The UPDATE statement conflicted with the REFERENCE constraint "FK_GoalRequirement_Question". The conflict occurred in database "numgmttest", table "dbo.GoalRequirement", column 'QuestionID'. 14 0
Я не помню, как это сделать, поэтому я здесь. Любая помощь?
Ответы
Ответ 1
Вы можете:
- временно отключить применение ограничений FK (см. здесь или здесь)
- обнови свой ПК
- обновите свои ФК
- включить обратно принудительное применение ограничений FK
сделайте все это в рамках транзакции и убедитесь, что в случае сбоя транзакции вы откатите ее должным образом и по-прежнему применяете ограничения FK.
Но... зачем вам менять ПК? Я надеюсь, что это действие, которое выполняется редко (устаревший импорт данных или что-то в этом роде).
Ответ 2
Используются ли ваши отношения с помощью
ON UPDATE CASCADE
Если они затем меняют ключ в первичной таблице, будут обновлены внешние ключи.
например.
ALTER TABLE Books
ADD CONSTRAINT fk_author
FOREIGN KEY (AuthorID)
REFERENCES Authors (AuthorID) ON UPDATE CASCADE
Ответ 3
Если вы хотите установить правило Cascade графически, то установите Cascade Rule на SQL Management Studio
- Открыть таблицу в режиме разработки
- Нажмите кнопку "Связь" с верхней панели инструментов
- Выберите требуемые отношения FK (один за другим)
- Правая сторона - развернуть спецификацию INSERT или UPDATE
- Измените правило UPDATE на - Cascade
Закрыть и сохранить, Готово!
(Пробовал на SQL 2008)
Ответ 4
Поскольку я не слишком уверен в отключении ограничений FK, я тоже предпочитаю:
- Дублируйте строку со старым PK с одним с новым PK
- Обновить FK
- Удалить строку со старым PK
Преимущество: во время процесса не было нарушено ограничение.
Ответ 5
перейти к внешним ключевым отношениям всех дочерних таблиц, а также о вставке и обновлении спецификации изменить правила удаления и обновления для каскада. это может помочь вам немного
Ответ 6
-create à Новая строка с теми же данными и à другим первичным ключом.
-update все детские столы.
-remove строка, в которой вы повторяли свои данные
И это сделано.