在DB2 over SSIS中的from参数中的WHERE列

在DB2 over SSIS中的from参数中的WHERE列,ssis,db2,sql-like,where-clause,sql-in,Ssis,Db2,Sql Like,Where Clause,Sql In,我想在DB2的SSIS包中执行以下命令 更新MyTable 设置Col1=?, Col2=? Col3在哪里 参数已连接,包已成功完成,但未更新任何行。Col3包含123、452等值,第三个参数是包含345432456432667123456等内容的字符串 我必须更改什么才能更新行 我尝试了以下几点。在SQLServer中它可以工作,但在DB2中不行 更新MyTable 设置Col1=?, Col2=? 哪里类似“%”CONCAT Col3 CONCAT“%” 编辑 第三个参数中的值是“345”

我想在DB2的SSIS包中执行以下命令

更新MyTable 设置Col1=?, Col2=? Col3在哪里 参数已连接,包已成功完成,但未更新任何行。Col3包含123、452等值,第三个参数是包含345432456432667123456等内容的字符串

我必须更改什么才能更新行

我尝试了以下几点。在SQLServer中它可以工作,但在DB2中不行

更新MyTable 设置Col1=?, Col2=? 哪里类似“%”CONCAT Col3 CONCAT“%” 编辑


第三个参数中的值是“345”、“432”、“456”、“432”、“667”、“123”、“456”。Col3中的内容也是一个字符串。

将所有值放在一个字符串中,SQL认为它是一个值“345432456432667123456”


您必须动态生成in语句列表,或者如果要删除的行数是常量,则为要删除的每一行输入一个单独的变量。

您必须使用表达式来实现这一点。从变量中使用SQL命令,并选择一个定义类似表达式的变量:

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

从一段时间以来,我没有在DB2中使用SSIS,所以如果变量optio中没有SQL命令。单击数据流任务,按F4键以显示属性选项卡,转到表达式。在表达式窗体中可以找到[OLEDB Source].SQLCommand属性,您可以在其中编写表达式

您可以标记作为参数传递的字符串

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
);

WHERE子句中的subselect从字符串生成一个int值的虚拟表,例如,345432456432667123456作为第三个参数传递。

对于此解决方案,我需要动态SQL。如果我读对了,我只能在DB2存储过程中完成,而不能内联完成。这是正确的还是可以在内联命令中使用动态SQL?请检查我的答案UpdateAnks。如果我下周末继续做这个项目,我会试试的。
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
);