Как можно временно отключить ограничения внешнего ключа с помощью T-SQL?

Это только вопрос вкуса. Используйте все, что пожелаете.

Большую часть времени я использую второй, но это зависит.

Позвольте мне также предложить вам хороший редактор, который выделит переменную внутри строки

790
задан Ray Vega 24 April 2015 в 16:10
поделиться

3 ответа

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

-- disable all constraints
EXEC sp_MSforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

Для переключения их назад на работайте: (печать является дополнительной, конечно, и она просто перечисляет таблицы)

-- enable all constraints
exec sp_MSforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"

, я нахожу его полезным при заполнении данных от одной базы данных до другого. Это - намного лучший подход, чем отбрасывание ограничений. Как Вы упомянули, это прибывает удобное при отбрасывании всех данных в базе данных, и повторно заполняя его (скажите в тестовой среде).

при удалении всех данных можно найти это решение быть полезными.

Также иногда удобно отключить все триггеры также, Вы видите полное решение здесь .

1079
ответ дан Community 24 April 2015 в 16:10
поделиться

Стандарт SQL-92 позволяет, чтобы constaint был объявлен как ДОПУСКАЮЩИЙ ЗАДЕРЖКУ так, чтобы он мог быть задержан (неявно или явно) в рамках транзакции. К сожалению, SQL Server все еще пропускает эту функциональность SQL-92.

Для меня, изменяя ограничение на NOCHECK сродни изменению структуры базы данных на лету - отбрасывание ограничений, конечно, - и что-то, чтобы избежаться (например, пользователи требуют увеличенных полномочий).

9
ответ дан onedaywhen 24 April 2015 в 16:10
поделиться

http://www.sqljunkies.com/WebLog/roman/archive/2005/01/30/7037.aspx

-- Disable all table constraints

ALTER TABLE MyTable NOCHECK CONSTRAINT ALL

-- Enable all table constraints

ALTER TABLE MyTable WITH CHECK CHECK CONSTRAINT ALL

-- Disable single constraint

ALTER TABLE MyTable NOCHECK CONSTRAINT MyConstraint

-- Enable single constraint

ALTER TABLE MyTable WITH CHECK CHECK CONSTRAINT MyConstraint
381
ответ дан geographika 24 April 2015 в 16:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: