2017-04-25 152 views
2

我的SSIS包中有一个Execute SQL task,只有在某个条件为真时才应执行SQL存储过程。SSIS中的条件执行SQL任务

我有一个用户变量[User::run],它在包启动时获取一个值。在我的SQL任务中,我有以下代码:

declare @run varchar(1) 
set @run = '" + @[User::run] + "' 
if @run = 'Y' 
begin 
EXEC sp_procedure() 
end 

但是,存储过程从未得到执行。任何帮助或建议将非常感激。

+1

谢谢哈迪。有效。 –

回答

2

这看起来像一个表达式不是sql。

打开Execute SQL Task,去Expressions标签,添加一个表达式SqlStatementSource

"declare @run varchar(1) 
set @run = '" + @[User::run] + "' 
if @run = 'Y' 
begin 
EXEC sp_procedure() 
end" 

“您可以使用表达式将参数值连接成查询字符串,并设置任务的SqlStatementSource财产。 “ Read more

0

如果不是动态设置[User :: run]变量,而是手动设置它,会怎么样?它是否执行程序呢?如果是的话,你知道设置变量有一个问题,如果不是,那么你知道它是与任务有关的。

是否有一个特定的原因,你想使用if语句来尝试和执行该过程?我建议两个优先约束。一个直接到工作结束,可能是一封电子邮件,说明它完成并记录任何结果。另一个指向存储过程。

作为一个例子,一个优先约束会从你的第一步连接到第二步,第二步是你的exec t-sql。连接器属性如下所示,以评估如果变量设置正确,那么它将流向您的T-SQL任务。

contraint if true

下面是另一个连接器将被设置为好,它就会流向另一项任务,一个将结束SSIS包。

enter image description here

1

只需设置

@run = @[User::run] 

不要加双引号。