Единственное время необходимо установить переменную в NULL, - когда переменная не выходит из объема, и Вам больше не нужны данные, связанные с ним. Иначе нет никакой потребности.
You can set the constraints on that table / column to not check temporarily, then re-enable the constraints. General form would be:
ALTER TABLE TableName NOCHECK CONSTRAINT ConstraintName
Then re-enable all constraints with
ALTER TABLE TableName CHECK CONSTRAINT ConstraintName
I assume that this would be temporary though? You obviously wouldn't want to do this consistently.
Do not under any circumstances disable the constraints. This is an extremely stupid practice. You cannot maintain data integrity if you do things like this. Data integrity is the first consideration of a database because without it, you have nothing.
The correct method is to delete from the child tables before trying to delete the parent record. You are probably timing out because you have set up cascading deltes which is another bad practice in a large database.
Да, просто запустите
DELETE FROM myTable where myTable.ID = 6850
И ПОЗВОЛЬТЕ ДВИГАТЕЛЮ ПРОВЕРИТЬ ОГРАНИЧЕНИЯ .
Если вы пытаетесь быть «умным» и отключать ограничения, вам придется заплатить огромную цену: восстановление ограничений должно проверять каждую строку вместо той, которую вы только что удалили. Существуют внутренние флаги, которые SQL сохраняет, чтобы знать, является ли ограничение «доверенным» или нет. Ваша «оптимизация» приведет либо к изменению этих флагов на «false» (это означает, что SQL больше не доверяет ограничениям), либо к их повторной проверке с нуля.
См. Рекомендации по отключению индексов и ограничений и Недоверенные ограничения и производительность .
Для всех таблиц с внешними ключами, указывающими на эту, используйте:
ALTER TABLE MyOtherTable NOCHECK CONSTRAINT fk_name
You could maybe disable and re-enable constraints:
http://sqlforums.windowsitpro.com/web/forum/messageview.aspx?catid=60&threadid=48410&enterthread=y