SQL Merge Query - Выполнение дополнительного запроса - PullRequest
2 голосов
/ 26 сентября 2011

Я написал рабочий оператор T-SQL MERGE. Предполагается, что база данных A содержит записи о звонках в службу поддержки клиентов. Если они возвращают продукт для ремонта, база данных B должна быть заполнена определенными элементами данных из базы данных A (например, имя клиента, адрес, идентификатор продукта, серийный номер и т. Д.), Поэтому я буду запускать задание SQL Server, которое выполняет SSIS Пакет каждые полчаса или около того, в котором MERGE выполнит одно из следующих действий:

  1. Если для обращения в службу поддержки в базе данных A требуется возврат продукта и отсутствует в базе данных B, вставьте его в базу данных B ..
  2. Если для обращения в службу поддержки в базе данных A требуется возврат продукта и находится в базе данных B - но данные изменились - ОБНОВИТЬ его в базе данных B.
  3. Если в базе данных B есть возврат товара, но он больше не указано как возврат продукта в Базе данных A (да, это может произойти - клиент может изменить свое решение в более позднее время / дату и не хочет платить за заменяющий продукт), УДАЛИТЬ его из базы данных B.

Моя проблема заключается в том, что в базе данных B есть дополнительная таблица с отношением FK «один ко многим» с таблицей, заполняемой в MERGE. Я не знаю, как или даже могу ли я использовать оператор MERGE, чтобы сначала удалить записи в таблице с ограничением FK, прежде чем удалять записи, как я делаю в настоящее время в моем операторе MERGE.

Очевидно, одним из способов было бы избавиться от DELETE в MERGE и взломать идентификаторы записи для удаления во временной таблице, затем удалить из таблицы FK, а затем из таблицы PK. Но если я смогу каким-то образом удалить из обе таблицы в WHEN NOT MATCHED BY SOURCE, это будет более чистый код. Можно ли это сделать?

1 Ответ

4 голосов
/ 26 сентября 2011

Вы можете только UPDATE, DELETE или INSERT в / из одной таблицы на запрос.

Однако, если вы добавите ON DELETE CASCADE к отношению FK, вложенная таблица будет очищена при удалении из основной таблицы и будет обработана за одну операцию.

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