Member 13691939 Ответов: 1

Загрузка данных из промежуточной таблицы в несколько таблиц


Я использую MS SQL server 2017, и это тестовая база данных, где я пытаюсь решить проблему.

-Эта база данных содержит 4 таблицы (календарь, клиенты, продажи, Stage_Orders)
-Stage_Orders-это промежуточная таблица, содержащая новые заказы.
-Мне нужно загрузить таблицу клиентов и продаж с этими новыми данными.
-Если клиент, идентифицированный номером клиента из таблицы Stage_Orders, уже существует в таблице Customers, то он не добавляется снова, однако, если какой-либо из атрибутов изменился из записи, которая уже существует в таблице Customers, они должны быть обновлены. Если клиент не существует в таблице Customers, его следует добавить.
-Суррогатный ключ должен быть сгенерирован для любых новых записей клиентов, созданных.
-Таблица продаж должна быть загружена проводками продаж из Stage_Orders, а customerskey должен быть найден и назначен новой строке в таблице продаж, чтобы ее можно было объединить в запросе к таблице Customers на CustomerKey.

Что я уже пробовал:

Я пробовал оператор MERGE, который вставляет новую строку, если customerid этого не делает, или обновляет определенные столбцы, когда адрес, номер телефона и т. д. отличаются.

Я, кажется, не могу сделать это правильно.

Wendelius

Как выглядит запрос и в чем его проблема?

1 Ответов

Рейтинг:
0

Wendelius

Поскольку вы не опубликовали SQL для работы с ним, возможно только общее обсуждение...

Похоже, что сама структура слияния вызывает у вас проблемы, возможно, вы пытаетесь сделать слишком много за один запуск. Это может быть проще, если вы разделите загрузку данных на два разных этапа.

Сначала загрузите все строки, которые не существуют в целевом объекте (выполните вставки). В этом запросе вы можете обрабатывать все специфические требования вставки, не беспокоясь об обновлениях. После того как часть вставки будет выполнена, выполните обновления с другим запросом, снова с определенными определениями обновления.

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

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