Запрос TRUNCATE TABLE не может быть выполнен в SSIS из-за внешнего ключа - PullRequest
1 голос
/ 23 марта 2012

У меня есть таблица Person, которая содержит 2 поля. В другой моей базе данных у меня есть Таблица участников (также есть 2 столбца). Из таблицы участников мне нужно вставить значения в таблицу Person.но перед каждой вставкой я хочу обрезать таблицу.

Я пробовал связать задачу «Выполнить Sql» с задачей «Поток данных». Но она показывает ошибку, что там существует отношение Первичный внешний ключ.

Ответы [ 5 ]

6 голосов
/ 23 марта 2012

Если я правильно понимаю, SSIS не имеет ничего общего с вашей реальной проблемой, которая заключается в том, что вы хотите обрезать таблицу, на которую ссылается ограничение внешнего ключа.На этот вопрос уже был дан ответ: Невозможно усечь таблицу, поскольку на нее ссылается ограничение FOREIGN KEY?

4 голосов
/ 23 марта 2012

Если таблица на сервере sql имеет ссылки на внешние ключи, то вы не можете усечь.вместо этого в вашей задаче выполнения sql используйте delete без предложения where.

delete from person_table

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

1 голос
/ 23 марта 2012

Создайте задачу «Выполнить SQl» и запустите DELETE FROM person после этой задачи, запустите импорт.

DELETE FROM даст тот же результат, что и TRUNCATE TABLE, но если таблица имеет внешний ключуказывая на это, оно не может быть усечено.Вы должны использовать команду удаления

0 голосов
/ 25 августа 2015

В SSIS Задача «Передача объектов SQL Server» Установить свойство DeleteFirst в TRUE enter image description here

0 голосов
/ 28 марта 2012

Вы не сможете удалить, пока не будет включено каскадное удаление (или вы сначала не удалите дочерние записи). Почему это проблема, которую вы спрашиваете, почему я не могу делать то, что хочу? Потому что, если вы это сделаете, вы можете потерять целостность данных. Предположим, у меня есть записи в таблице 2, которые относятся к записям в таблице 1. Предположим, что таблица 1 имеет автоматически сгенерированный идентификатор. Если бы я мог обрезать эту таблицу, то я бы оставил эти записи в таблице 2 без каких-либо записей, чтобы ссылаться на них, они стали осиротевшими. Хорошо, но я возвращаю данные, говорите вы. Но тогда у них будут новые идентификационные номера, и вы все равно потеряете связь с соответствующими данными.

Можете ли вы бросить FK и обрезать и вставить и воссоздать FK. Да, вы можете, но это плохая практика, и вы не должны этого делать, если только вы не воссоздаете эти связанные записи.

Рекомендуется использовать оператор MERGE для обновления или вставки в зависимости от того, что вам нужно.

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