Поделиться через


Предложение MERGE в пакетах служб Integration Services

В текущем выпуске SQL Server Службы Integration Services инструкция SQL в задаче «Выполнение SQL» может содержать инструкцию MERGE. Эта инструкция MERGE позволяет выполнять несколько операций INSERT, UPDATE и DELETE в единой инструкции.

Для использования в пакете инструкции MERGE выполните следующее.

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

  • Создайте задачу «Выполнение SQL», содержащую инструкцию MERGE.

  • Соедините задачу потока данных с задачей «Выполнение SQL» и используйте данные из промежуточной таблицы в качестве входных данных инструкции MERGE.

    ПримечаниеПримечание

    Хотя инструкции MERGE в этом случае обычно требуется промежуточная таблица, все равно эта инструкция обычно выполняется быстрее, чем уточняющие запросы для всех строк, выполняемые преобразованием «Уточняющий запрос». Инструкция MERGE полезна также при большом размере таблицы уточняющих запросов. В этом случае преобразованию «Уточняющий запрос» может не хватить памяти для кэширования ссылочной таблицы.

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

Образец целевого компонента, который поддерживает использование инструкции MERGE, см. в примере MERGE Destination сообщества CodePlex.

Использование инструкции MERGE

Обычно инструкция MERGE используется для применения изменений, в том числе операций вставки, редактирования и удаления, выполненных в одной таблице, к другой таблице. До появления SQL Server 2008 для этого процесса было необходимо преобразование «Уточняющий запрос» и несколько преобразований «Команда OLE DB». Преобразование «Уточняющий запрос» выполняло уточняющие запросы к каждой строке, чтобы определить, какие из них были добавлены или изменены. Затем преобразования «Команда OLE DB» выполняли необходимые операции INSERT, UPDATE и DELETE. Начиная с SQL Server 2008, и преобразование «Уточняющий запрос», и соответствующие преобразования «Команда OLE DB» заменила единственная инструкция MERGE.

Инструкция MERGE с добавочной загрузкой

В SQL Server 2008 внесены изменения в систему отслеживания измененных данных, поэтому процесс добавочной загрузки в хранилище данных стал проще и безопаснее. В качестве альтернативы параметризованным преобразованиям «Команда OLE DB», с помощью которых производились вставки и обновления, можно использовать инструкцию MERGE для объединения этих операций.

Дополнительные сведения см. в разделе Применение изменений в назначении.

Инструкция MERGE в других сценариях

В следующих сценариях инструкцию MERGE можно использовать как внутри, так и вне пакета служб Службы Integration Services. Однако пакетам служб Службы Integration Services часто приходится загружать эти данные из нескольких разнородных источников, а затем объединять их и проводить очистку. Вместо этого можно использовать в пакете инструкцию MERGE. Это удобно и упрощает поддержку.

Отслеживание привычек покупателей

Предположим, что в хранилище данных существует таблица FactBuyingHabits, в которой отслеживаются последние даты покупки каждым заказчиком определенного товара. Таблица состоит из столбцов ProductID, CustomerID и PurchaseDate. Через каждую неделю транзакционная база данных создает таблицу PurchaseRecords, куда входят покупки за эту неделю. Задача состоит в том, чтобы применить единственную инструкцию MERGE для добавления данных из таблицы PurchaseRecords в таблицу FactBuyingHabits. Для пар товар-заказчик, которые не существовали, инструкция MERGE добавляет новые строки. Для существующих пар товар-заказчик инструкция MERGE изменяет дату последней покупки.

Отслеживание журнала цен

Таблица DimBook представляет собой список книг на складе продавца книг. В ней содержится журнал цен на каждую книгу. В этой таблице имеются следующие столбцы: ISBN, ProductID, Price, Shelf и IsCurrent. Таблица содержит по одной строке на каждую цену, которая когда-либо была у книги. Одна из строк содержит текущую цену. Чтобы указать, какая именно строка содержит текущую цену, столбец IsCurrent этой строки содержит значение 1.

Еженедельно база данных создает таблицу WeeklyChanges, в которой содержатся изменения цен за неделю и новые книги, добавленные за эту неделю. Изменения таблицы WeeklyChanges можно перенести в таблицу DimBook с помощью единственной инструкции MERGE. Инструкция MERGE добавляет новые строки для вновь добавленных книг и изменяет столбец IsCurrent на 0 для строк существующих книг, у которых изменились цены. Инструкция MERGE также добавляет новые строки для книг, у которых изменились цены, и устанавливает для столбца IsCurrent этих строк значение 1.

Слияние таблицы новых данных со старой таблицей

База данных моделирует свойства объекта, используя «открытую схему». Это значит, что таблица содержит пары имя-значение для каждого свойства. Таблица Properties включает три столбца: EntityID, PropertyID и Value. Таблица NewProperties представляет собой обновленную версию таблицы, которую следует синхронизировать с таблицей Properties. Для синхронизации этих двух таблиц можно с помощью инструкции MERGE выполнить следующие операции:

  • удалить свойства из таблицы Properties, если их нет в таблице NewProperties;

  • изменить значения свойств из таблицы Properties на новые, найденные в таблице NewProperties;

  • создать новые свойства, присутствующие в таблице NewProperties, если их нет в таблице Properties.

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

Ведение инвентарного учета

База данных Inventory содержит таблицу ProductsInventory, в которой есть столбцы ProductID и StockOnHand. Таблица Shipments со столбцами ProductID, CustomerID и Quantity хранит данные об отгрузке товаров заказчикам. Таблица ProductInventory должна ежедневно обновляться на основании данных из таблицы Shipments. Уменьшить указанное в таблице ProductInventory количество товара на основании данных об отгрузке можно с помощью единственной инструкции MERGE. Если запас товара на складе сократился до 0, инструкция MERGE может также удалить строку этого продукта из таблицы ProductInventory.

См. также

Значок служб Integration Services (маленький) Будьте в курсе новых возможностей служб Integration Services

Чтобы получить новейшую документацию, статьи, образцы и видеоматериалы корпорации Майкрософт, а также лучшие решения участников сообщества, посетите страницу служб Службы Integration Services на сайте MSDN:


Чтобы получать автоматические уведомления об этих обновлениях, подпишитесь на RSS-каналы, предлагаемые на этой странице.