SSIS:如何在执行SQL任务的更新语句中传递字符串参数?

时间:2017-09-13 21:48:02

标签: sql parameter-passing ssis-2012

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

  

合并(s1.iteration,'')不喜欢'%?%'和s2.Iteration ='?'

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

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

3 个答案:

答案 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中试一试,看看它是否实际运行或做了什么。

Map your Variable

Set Breakpoint

Watch your variable has a value

答案 2 :(得分:0)

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

SELECT ? +' Hello World!'

以上内容不需要使用其他字符串变量。