Вопрос по sql-server-2008, ssis – Обновление строк в месте назначения SSIS OLEDB

22

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

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

<code>SELECT * FROM staging1
UNION
SELECT * FROM staging2 
</code>

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

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

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

Ваш Ответ

3   ответа
31

ых с компонентами OOB.

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

Данные этапа

Обновления на основе

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

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

Да, это ответ / подтверждение, которое я искал; прямое нет :). Не повезло, я не могу использовать сторонние инструменты. Rahul
Мне нужно зарегистрироваться, чтобы прочитать статью?! statikuz
@ statikuz Я согласен, но с Guerrillamail.com Это займет всего несколько секун Turch
sqlservercentral стоит регистрации, ИМХО. Я также согласен с @Turch об использовании временного почтового сервиса. Держит ваш почтовый ящик в чистоте. Кроме того, вы можете просто отписаться от их списка рассылки после регистрации. Ryan Kyle
Если регистрация тебя так беспокоит Bugmenot.com / вид / sqlservercentral.com Des Horsley
14

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

Шаги, чтобы сделать обновление:

Drag OLEDB Command [вместо пункта назначения oledb] Перейти в окно свойств

Под пользовательскими свойствами выберите SQLCOMMAND и вставьте команду обновления, например:

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

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

rs, прочитай мой вопрос еще раз; Я уже знаю, что это должно быть обновление и не нужно решать. Просто хочу узнать, как мне обновлять массовые рокорды. Rahul
Рахул правильно. Связанная статья выполнит одноэлементные обновления для всех 50-тысячных строк. Это будет медленно и больно. Они хотят выпустить один оператор обновления, который объединит данные одним махом. billinkc
Ты читал эту статью? Он расскажет, как сгенерировать скрипт для обновления строк, а также расскажет, как можно обновлять в SSIS rs.
после этого это можно сделать с помощью «выполнить задачу sql», где он может написать сценарий для выбора и обновления или использовать хранимую процедуру; на вкладке потока данных нет возможности выполнить массовое обновление с использованием источника и адресатов. Процесс задачи потока данных строка за строкой rs.
Хотя это не решение, которое я не искал, а +1 за предоставление альтернативы. Rahul
2

Обновление всех строк с использованием 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
Я сам думал об этом. Зачем переживать трудности выбора промежуточной таблицы, а затем обновления из промежуточной таблицы, если вы можете просто использовать задачу сценария для создания единого оператора SQL, который выбирает и обновляет? mbeckish

Похожие вопросы