Подтвердить что ты не робот

Обновить строки в службе SSIS OLEDB

У меня есть процесс потока данных, где у меня есть источник OLEDB и назначение OLEDB, как показано ниже:

Data Flow Task

Источник объединяет данные из двух промежуточных таблиц и возвращает набор результатов (скажем, 50 тыс. строк). Эти 50K строк также присутствуют в таблице адресатов, но являются старыми данными.

SELECT * FROM staging1
UNION
SELECT * FROM staging2 

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

Вид массового обновления.

Может кто-нибудь, пожалуйста, дайте мне знать, как я могу это сделать? Я ценю вашу помощь.

4b9b3361

Ответ 1

Хорошо, нашел решение моей проблемы; Обновление всех строк с использованием SQL-запроса и SQL-задачи в SSIS, как показано ниже. Может помочь другим, если они столкнутся с такой же проблемой в будущем.

update Original 
set Original.Vaal= t.vaal 
from Original join (select * from staging1  union   select * from staging2) t 
on Original.id=t.id

Ответ 2

Вы не можете выполнять массовое обновление в SSIS в задаче потока данных с компонентами OOB.

Общий шаблон заключается в том, чтобы идентифицировать ваши вставки, обновления и удаления, а также выталкивать обновления и удалять их в промежуточную таблицу (таблицы) и после задачи потока данных, использовать обновление на основе набора или удалить в SQL-запросе Execute. Посмотрите на Энди Леонарда Лестница в серии Integration Services. Прокрутите примерно 3/4 путь вниз к статье в "Обновления на основе набора", чтобы увидеть шаблон.

Данные этапа

http://www.sqlservercentral.com/Images/11369.png

Установленные обновления

enter image description here

Вы получите гораздо лучшую производительность с таким шаблоном, как с помощью преобразования OLE DB Command для чего угодно, кроме тривиальных объемов данных.

Если вы используете сторонние инструменты, я считаю, что CozyRoc и я знаю, что PragmaticWorks имеет компонент назначения слияния.

Ответ 3

Используйте Lookupstage, чтобы решить, следует ли вставлять или обновлять. Проверьте эту ссылку для получения дополнительной информации - http://beingoyen.blogspot.com/2010/03/ssis-how-to-update-instead-of-insert.html

Действия по обновлению:

  • Перетащите команду OLEDB [вместо назначения oledb]
  • Перейти к окну свойств
  • В разделе Пользовательские свойства выберите SQLCOMMAND и вставьте команду update ex:

    UPDATE table1 SET col1 =?, col2 =? где id =?

  • отображать столбцы в точном порядке от источника к выходу, как в команде обновления