ГДЕ Столбец IN из параметра в DB2 через SSIS - PullRequest
2 голосов
/ 05 апреля 2019

Я хочу выполнить следующую команду в пакете служб SSIS для DB2.

UPDATE MyTable
    SET Col1 = ?,
        Col2 = ?
WHERE Col3 IN (?)

Параметры подключены, и пакет успешно завершен, но ни одна строка не обновлена. Col3 содержит значения типа 123, 452 и т. Д., А третий параметр представляет собой строку с содержимым, например 345,432,456,432,667,123,456.

Что я должен изменить, чтобы иметь возможность обновлять строки?

Я попробовал это со следующим. В SQL Server это будет работать, но в DB2 нет.

UPDATE MyTable
    SET Col1 = ?,
        Col2 = ?
WHERE ? LIKE '%' CONCAT Col3 CONCAT '%'

Редактировать

Значение в третьем параметре равно '345','432','456','432','667','123','456'. Содержимое в Col3 также является строкой.

Ответы [ 3 ]

2 голосов
/ 06 апреля 2019

У вас есть возможность "токенизировать" строку, переданную в качестве параметра.

UPDATE MyTable m
    SET Col1 = ?,
        Col2 = ?
WHERE Col3 IN
(
  select TOKEN
  from xmltable
  (
  'for $id in tokenize($s, ",") return <i>{string($id)}</i>' 
  passing cast (? as varchar(100)) as "s"
  columns 
    TOKEN integer path 'if (. castable as xs:integer) then xs:integer(.) else ()'
  ) t
);

subselect в предложении WHERE создает "виртуальную" таблицу значений int изстрока (например, 345,432,456,432,667,123,456), переданная в качестве 3-го параметра.

1 голос
/ 05 апреля 2019

Вы должны использовать выражения для достижения этой цели.Используйте команду SQL из переменной и выберите переменную, в которой вы определяете аналогичное выражение:

"UPDATE MyTable
    SET Col1 ='" +(DT_WSTR,50)@[User::Var1] +"' ,
        Col2 ='" +(DT_WSTR,50)@[User::Var2] +"'
WHERE Col3 IN (" + (DT_WSTR,50)@[User::Var3] + ")"

Некоторое время я не использовал SSIS с DB2, поэтому, если нет SQL Command from variable optio.Нажмите на задачу потока данных, нажмите F4, чтобы показать вкладку свойств, перейти к выражениям.В форме выражения вы найдете свойство [OLEDB Source].SQLCommand, в которое вы можете записать выражение.

1 голос
/ 05 апреля 2019

Вы помещаете все значения в одну строку, и SQL считает, что это одно значение '345,432,456,432,667,123,456'.

Вам придется динамически составлять список операторов in или, если количество удаляемых строк является постоянным, поместите отдельную переменную для каждой удаляемой строки.

...