Я написал рабочий оператор T-SQL MERGE. Предполагается, что база данных A содержит записи о звонках в службу поддержки клиентов. Если они возвращают продукт для ремонта, база данных B должна быть заполнена определенными элементами данных из базы данных A (например, имя клиента, адрес, идентификатор продукта, серийный номер и т. Д.), Поэтому я буду запускать задание SQL Server, которое выполняет SSIS Пакет каждые полчаса или около того, в котором MERGE выполнит одно из следующих действий:
- Если для обращения в службу поддержки в базе данных A требуется возврат продукта и
отсутствует в базе данных B, вставьте его в базу данных B ..
- Если для обращения в службу поддержки в базе данных A требуется возврат продукта и
находится в базе данных B - но данные изменились - ОБНОВИТЬ его в базе данных B.
- Если в базе данных B есть возврат товара, но он больше не
указано как возврат продукта в Базе данных A (да, это может произойти - клиент может изменить свое решение в более позднее время / дату и не хочет платить за заменяющий продукт), УДАЛИТЬ его из базы данных
B.
Моя проблема заключается в том, что в базе данных B есть дополнительная таблица с отношением FK «один ко многим» с таблицей, заполняемой в MERGE. Я не знаю, как или даже могу ли я использовать оператор MERGE, чтобы сначала удалить записи в таблице с ограничением FK, прежде чем удалять записи, как я делаю в настоящее время в моем операторе MERGE.
Очевидно, одним из способов было бы избавиться от DELETE в MERGE и взломать идентификаторы записи для удаления во временной таблице, затем удалить из таблицы FK, а затем из таблицы PK. Но если я смогу каким-то образом удалить из обе таблицы в WHEN NOT MATCHED BY SOURCE
, это будет более чистый код. Можно ли это сделать?