Отключить ограничения при массовом обновлении в SQL Server - PullRequest
0 голосов
/ 15 января 2010

Мне нужно изменить значения PK / FK (добавить 10000) на 2 таблицы. Как мне сказать двум задействованным таблицам, что они должны заботиться не о ссылочной целостности во время обновления, а о том, чтобы заботиться о них после. Я не хочу прерывать и воссоздавать отношения, если мне это не нужно.

Ответы [ 4 ]

2 голосов
/ 15 января 2010

Эта ссылка описывает, как временно отключить ограничение. Я не проверял это.

-- disable constraint
ALTER TABLE table_name NOCHECK CONSTRAINT constraint_name
-- enable constraint
ALTER TABLE table_name CHECK CONSTRAINT constraint_name
2 голосов
/ 15 января 2010

Ваш FK должен иметь опцию «ОБНОВЛЕНИЕ КАСКАДА».

ALTER TABLE child CHANGE myfkconst FOREIGN KEY id REFERENCES parent (id) ON UPDATE CASCADE;

(или что-то в этом роде. Не уверен на 100% в синтаксисе)

И тогда вы можете просто сделать

UPDATE parent SET id = id + 10000 WHERE id = something

и дочерняя таблица будет обновлена ​​автоматически.

2 голосов
/ 15 января 2010

Вы можете отключить все ограничения в базе данных, выполнив следующую команду:

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all";

Затем снова включите их с помощью:

EXEC sp_msforeachtable @command1="print '?'", 
                       @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all";

Источник: Переполнение стека - можно ли временно отключить ограничения внешнего ключа с помощью TSQL?

0 голосов
/ 15 января 2010

Извините, вы должны. Нет варианта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...