Отключить ограничение внешнего ключа для всех таблиц не работает - PullRequest
3 голосов
/ 20 марта 2010

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

Невозможно усечь таблицу '', так как на нее ссылается ограничение 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  

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

Ответы [ 2 ]

5 голосов
/ 20 марта 2010

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

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

Подобный вопрос здесь в SO.

1 голос
/ 20 марта 2010

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

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

Если вы хотите создать копию вашей базы данных (например) с теми же таблицами, без данных в них, вы можете сделать это с пакетом служб SSIS очень легко (просто убедитесь, что для параметра COPY DATA) установлено значение False

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...