Обновить строки в службе SSIS OLEDB
У меня есть процесс потока данных, где у меня есть источник OLEDB и назначение OLEDB, как показано ниже:
![Data Flow Task]()
Источник объединяет данные из двух промежуточных таблиц и возвращает набор результатов (скажем, 50 тыс. строк). Эти 50K строк также присутствуют в таблице адресатов, но являются старыми данными.
SELECT * FROM staging1
UNION
SELECT * FROM staging2
Как правило, в пункте назначения OLEDB мы вставляем возвращаемый набор данных из таблицы источника в конечный, но в моем случае я должен обновить старые 50K строк этими новыми 50K строками.
Вид массового обновления.
Может кто-нибудь, пожалуйста, дайте мне знать, как я могу это сделать? Я ценю вашу помощь.
Ответы
Ответ 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 =?
-
отображать столбцы в точном порядке от источника к выходу, как в команде обновления