Вы можете отключать только ограничения FOREIGN KEY и CHECK. Другие ограничения необходимо удалять, а затем снова добавлять. Целесообразно отключать ограничения в следующих случаях:
■ Вы должны запустить большое пакетное задание или импортировать данные, и хотите при этом оптимизировать производительность. Для гарантии того, что данные согласованы перед повторным включением ограничений, Вы должны быть уверены, что данные соответствуют отключаемым ограничениям или должны выполнить соответствующие запросы как часть пакетного задания.
■ Вы можете определить ограничение на таблице, которая уже содержит данные. В результате каждая строка данных проверяется ограничением только после модификации.
Предупреждение.Отключение ограничения одной таблицы не затрагивает ограничения другой таблицы, которая ссылаются на первую. Поэтому, обновления таблицы все еще могут привести к ошибкам нарушения ограничений.
Когда Вы добавляете ограничение CHECK или FOREIGN KEY к таблице с существующими данными, Вы можете отключить проверку ограничения, включая в оператор ALTER TABLE опцию WITH NOCHECK. Существующие данные будут проверены только во время будущих обновлений столбца.
В следующем примере создается ограничение FOREIGN KEY на таблицу Sales.SalesOrderHeaderи используется опция WITH NOCHECK чтобы отключить проверку существующих данных.
ALTER TABLE [Sales].[SalesOrderHeader] WITH NOCHECK ADD CONSTRAINT
Вы можете отключить существующие ограничения CHECK и FOREIGN KEY так, чтобы не проверялись любые данные, которые Вы изменяете или добавляете в таблицу. Чтобы отключить CHECK и FOREIGN KEY, используйте опцию NOCHECK в операторе ALTER TABLE. Чтобы вернуть отключенное ограничение, выполните оператор ALTER TABLE, на сей раз с опцией CHECK.
В этом примере отключается ограничение FK_SalesOrderHeader_Customer_CustomerID.