【问题标题】:SSIS: How do I pass string parameter in an update statement in Execute SQL Task?SSIS:如何在执行 SQL 任务的更新语句中传递字符串参数?
【发布时间】:2017-09-13 21:48:01
【问题描述】:

我在 SSIS 2012 中有一个执行 SQL 任务,它有更新语句。我想在此更新语句的 where 子句中传递一个字符串变量。更新部分如下:

其中 coalesce(s1.iteration, '') 不像 '%?%' 和 s2.Iteration = '?'

在这里,?需要替换为字符串变量,在本例中为 08152017。我已将变量添加到参数映射中。附上截图。

任务成功执行,但未更新预期列中的值。似乎查询没有传递值。我做错了什么?如何检查 Execute SQL Task 中的 SQL 是否真的从变量中获取值?

【问题讨论】:

标签: sql parameter-passing ssis-2012


【解决方案1】:

首先,当您在参数映射中设置变量时,请确保数据类型是 NVARCHAR 而不是 LONG。

其次你需要这样写你的陈述:

where coalesce(s1.iteration, '') not like '%?%' and s2.Iteration = ?

您不需要 '' 因为您的变量已经设置为字符串。 尝试在变量中硬编码您的值以查看它是否通过。否则,请在执行前设置断点以查看您的变量是否具有值。

如果您的变量有值并且您的 SQL 不工作,也许您应该查看您的 SQL。也许直接在 SSMS 中尝试一下,看看它是否真正运行或做任何事情。

【讨论】:

    【解决方案2】:

    在场景中?为整型变量,请使用以下格式:

    SELECT ? +' Hello World!'
    

    以上不需要使用额外的字符串变量。

    【讨论】:

      【解决方案3】:

      创建一个带有%的用户变量,例如变量名为Like_Var,数据类型为String

      "%" + @Orig_Var + "%"
      

      假设 Orig_Var 的值为 08152017,因此 Like_Var 的值为 %08152017%

      然后在执行 SQL 任务中的参数上使用 Like_Var 作为参数 0,参数映射中的数据类型 VARCHAR

      WHERE COALESCE(s1.iteration, '') NOT LIKE ? 
        AND s2.Iteration = ?
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-28
        • 2023-03-27
        • 2015-09-25
        • 1970-01-01
        • 2016-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多