我在SSIS 2012中有一个执行SQL任务,它有更新语句。我想在此更新语句的where子句中传递一个字符串变量。更新部分如下:
合并(s1.iteration,'')不喜欢'%?%'和s2.Iteration ='?'
在这里,?需要替换为字符串变量,在本例中为 08152017 。我已将变量添加到参数映射中。屏幕截图已附上。
任务成功执行但不更新预期列中的值。似乎查询没有传递该值。我做错了什么?如何检查执行SQL任务中的SQL是否实际从变量中获取值?
答案 0 :(得分:0)
创建一个包含%的用户变量,例如,变量名称为Like_Var,数据类型为String
"%" + @Orig_Var + "%"
假设,Orig_Var的值为08152017,因此Like_Var将具有%08152017%
然后在Execute SQL Task中的参数上使用Like_Var作为参数0,参数映射中的数据类型VARCHAR
WHERE COALESCE(s1.iteration, '') NOT LIKE ?
AND s2.Iteration = ?
答案 1 :(得分:0)
首先,在参数映射中设置变量时,请确保数据类型为NVARCHAR而不是LONG。
其次你需要写下这样的陈述:
where coalesce(s1.iteration, '') not like '%?%' and s2.Iteration = ?
你不需要'',因为你的变量已经被设置为一个字符串。 尝试在变量中对您的值进行硬编码以查看它是否通过。否则,在预执行时设置断点以查看变量是否具有值。
如果你的变量有一个值并且你的SQL不起作用,那么你可能应该查看你的SQL。也许直接在SSMS中试一试,看看它是否实际运行或做了什么。
答案 2 :(得分:0)
在场景中?是整数类型变量,请使用以下格式:
SELECT ? +' Hello World!'
以上内容不需要使用其他字符串变量。