【问题标题】: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 = ?