SSIS - Обновление таблицы с помощью команды OLE DB

Мне нужно перевести следующий SQL-запрос в SSIS: (Каждая таблица принадлежит другому источнику - SQL Server и ORACLE)

update A
set
A.col1 = B.col1
A.col2 = B.col1
from
table A inner join table B B on A.col3 = Col3
where
A.col4 = value 1 and
A.col5 = value2 and
B.col4 = value 3;

Как видите, источник и место назначения соответствуют одному и тому же источнику: таблица A. Это рабочий процесс, который я создал.

введите описание изображения здесь

После условного разделения я использовал производный столбец, чтобы скопировать столбец B.Col1, чтобы использовать его в команде OLE DB для обновления столбцов таблицы A. После этого я написал следующий фрагмент запроса в команде OLE DB. задача:

update Table A
set
col1 = ?
col2 = ?

Но на данный момент у меня есть вопрос: обновляю ли я только значения подмножества, которое я получил в результате условного разделения, или я обновляю всю таблицу A. Кроме того, последняя часть запроса обновления ссылается на таблицу B и в В задаче команды OLE DB я могу сослаться только на один источник данных.

пояснения: код - это просто схема, поэтому мне не нужно исправлять его, в этом я не сомневаюсь (на случай, если я допустил ошибку).

Меня попросили сделать этот перевод без изменения запроса sql.

Если вам нужно больше знать, чтобы помочь, спросите, но будьте вежливы.

С Уважением


person d2907    schedule 06.02.2015    source источник
comment
если у вас нет предложения WHERE, вы обновляете всю таблицу. Хотя это задача потока данных.   -  person Tab Alleman    schedule 06.02.2015
comment
Это в точности моя вкладка, как я могу написать предложение where, когда у меня есть два разных источника информации в команде OLE DB?   -  person d2907    schedule 06.02.2015
comment
Просто предупредите, что это не приведет к обновлению на основе набора. Это будет строка за строкой и будет невероятно медленной. Лучше сбросить эту информацию в промежуточную таблицу, а затем запустить оператор обновления в задаче «Выполнение SQL».   -  person Zane    schedule 07.02.2015
comment
Невозможно для, я не могу создать новую таблицу в базе данных, поэтому я спрашиваю.   -  person d2907    schedule 09.02.2015
comment
Если на ваш вопрос был дан ответ, не могли бы вы закрыть его, щелкнув галочку рядом с ответом?   -  person Tab Alleman    schedule 22.07.2015


Ответы (1)


Обновление в вашей командной задаче SQL должно выглядеть так:

update Table A
set
col1 = ?
col2 = ?
WHERE SomeColumn = ?

Где SomeColumn - это столбец, который однозначно идентифицирует строку, и вам необходимо иметь значение SomeColumn в потоке данных, чтобы вы могли сопоставить его с третьим параметром в команде SQL.

При необходимости (судя по исходному обновлению) вы можете отобразить несколько столбцов из потока данных, на самом деле вы можете просто использовать исходный запрос в команде SQL:

update A
set
col1 = ?
col2 = ?
where
? = value 1 and
? = value2 and
? = value 3;
person Tab Alleman    schedule 06.02.2015