Это только вопрос вкуса. Используйте все, что пожелаете.
Большую часть времени я использую второй, но это зависит.
Позвольте мне также предложить вам хороший редактор, который выделит переменную внутри строки
Если Вы хотите отключить все ограничения в базе данных, просто выполняет этот код:
-- 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"
, я нахожу его полезным при заполнении данных от одной базы данных до другого. Это - намного лучший подход, чем отбрасывание ограничений. Как Вы упомянули, это прибывает удобное при отбрасывании всех данных в базе данных, и повторно заполняя его (скажите в тестовой среде).
при удалении всех данных можно найти это решение быть полезными.
Также иногда удобно отключить все триггеры также, Вы видите полное решение здесь .
Стандарт SQL-92 позволяет, чтобы constaint был объявлен как ДОПУСКАЮЩИЙ ЗАДЕРЖКУ так, чтобы он мог быть задержан (неявно или явно) в рамках транзакции. К сожалению, SQL Server все еще пропускает эту функциональность SQL-92.
Для меня, изменяя ограничение на NOCHECK сродни изменению структуры базы данных на лету - отбрасывание ограничений, конечно, - и что-то, чтобы избежаться (например, пользователи требуют увеличенных полномочий).
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