Отключить ограничение внешнего ключа для всех таблиц не сработало

Я пробую много команд, чтобы отключить ограничения таблиц в моей базе данных, чтобы выполнить усечение для всех таблиц, но все же теперь это дает мне ту же ошибку:

Невозможно усечь таблицу '', поскольку на нее ссылается ограничение FOREIGN KEY.

я пытаюсь

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
EXEC sp_MSforeachtable "TRUNCATE TABLE ?"

И я пробовал это для каждой таблицы

ALTER TABLE [Table Name] NOCHECK CONSTRAINT ALL  
truncate table [Table Name]
ALTER TABLE [Table Name] CHECK CONSTRAINT ALL  

и каждый раз у меня появляется предыдущее сообщение об ошибке. Как я могу решить эту проблему?


person Amr Badawy    schedule 20.03.2010    source источник


Ответы (2)


Если вы хотите усечь таблицу, возможно, вам придется отбросить внешние ключи и добавить их обратно. Из здесь.

«Вы не можете использовать TRUNCATE TABLE для таблицы, на которую ссылается ограничение FOREIGN KEY; вместо этого используйте оператор DELETE без предложения WHERE. Поскольку TRUNCATE TABLE не регистрируется, он не может активировать триггер».

Аналогичный вопрос здесь в SO.

person Ashish Gupta    schedule 20.03.2010
comment
Верно. TRUNCATE требует DROP. - person gbn; 20.03.2010
comment
Из первой ссылки: нельзя использовать TRUNCATE TABLE для таблицы, на которую ссылается ограничение FOREIGN KEY; вместо этого используйте оператор DELETE без предложения WHERE. (Акцент мой.) - person ladenedge; 22.03.2011

Думаю, это довольно плохая идея. Не рекомендуется слепо запускать такие команды SQL для ВСЕХ таблиц в вашей базе данных.

Что именно ты пытаешься сделать?

Если вы хотите создать копию своей базы данных (например) с теми же таблицами без данных в них, вы можете сделать это с помощью пакета SSIS очень легко (просто убедитесь, что для параметра КОПИРОВАТЬ ДАННЫЕ) установлено значение False

http://www.kodyaz.com/articles/transfer-sql-server-objects-task.aspx  alt text

person Justin Jenkins    schedule 20.03.2010