WHERE Column IN 来自 SSIS 上的 DB2 中的参数

Posted

技术标签:

【中文标题】WHERE Column IN 来自 SSIS 上的 DB2 中的参数【英文标题】:WHERE Column IN from parameter in DB2 over SSIS 【发布时间】:2019-08-27 09:16:26 【问题描述】:

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

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

参数已连接且包已成功完成,但没有更新任何行。 Col3 包含123452 等值,第三个参数是一个字符串,其内容为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 中的内容也是一个字符串。

【问题讨论】:

检查我的答案更新 【参考方案1】:

您可以“标记化”作为参数传递的字符串。

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 从作为第三个参数传递的字符串(例如,345,432,456,432,667,123,456)中生成int 值的“虚拟”表。

【讨论】:

【参考方案2】:

您将所有值放在一个字符串中,SQL 认为这是一个值'345,432,456,432,667,123,456'

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

【讨论】:

对于这个解决方案,我需要动态 SQL。如果我没看错的话,我只能在 DB2 存储过程中做到这一点,而不是内联。是否正确,或者我可以在内联命令中使用动态 SQL 吗?【参考方案3】:

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

"UPDATE MyTable
    SET Col1 ='" +(DT_WSTR,50)@[User::Var1] +"' ,
        Col2 ='" +(DT_WSTR,50)@[User::Var2] +"'
WHERE Col3 IN (" + (DT_WSTR,50)@[User::Var3] + ")"
https://www.mssqltips.com/sqlservertip/4564/ssis-variable-and-expression-example--part-1/ https://docs.microsoft.com/en-us/sql/integration-services/expressions/integration-services-ssis-expressions?view=sql-server-2017

有一段时间我没有将 SSIS 与 DB2 一起使用,所以如果没有 SQL Command from variable 选项。单击数据流任务,按 F4 显示属性选项卡,转到表达式。在表达式表单中,您将找到 [OLEDB Source].SQLCommand 属性,您可以在那里编写表达式。

【讨论】:

谢谢。如果我在下周末继续从事这个项目,我会试试的。

以上是关于WHERE Column IN 来自 SSIS 上的 DB2 中的参数的主要内容,如果未能解决你的问题,请参考以下文章

Unknown column ‘xxx‘ in ‘where clause‘

Column ‘uid‘ in where clause is ambiguous

laravel-8 whreRelation 说 Column not found: 1054 Unknown column 'relation' in 'where Clause'

mysql出现 Unknown column 'bname' in 'where clause'和Unknown column 'bid' in 

在 ssis 中导出到 csv 时包括前导零

Mysql Unknown column in where 子句 union all