SSIS基于参数执行SQL任务

时间:2013-07-02 14:46:53

标签: ssis

我可以做下面的事情,让我知道 IF @ parameter = 1 BEGIN ... query ... END IF @ parameter = 2 如果可能,需要正确的语法。 这是OLE DB连接。 不是存储过程只是一个SQL查询

3 个答案:

答案 0 :(得分:2)

DECLARE @param AS INT = ?;

IF @param  = 1
BEGIN
    SELECT 1 AS Y;
END
ELSE IF @param = 2
BEGIN
    SELECT 2 AS Y;
END

您的查询中有两个问号,可能您只传递了一个变量。我见过开发人员两次(或多次)传递相同值的代码。这是低效的。更好的方法是在SSIS变量中接收传递的参数。好处: 1.您只需传递一次值。 2.更重要的是,如果更改sql中使用传递参数的顺序,则无需在“执行SQL任务编辑器//参数”的用户界面上更改其顺序。这就是安迪伦纳德后来在回答中提出的建议。

答案 1 :(得分:0)

你可以。假设您指的是执行SQL任务,使用OLE DB连接的执行SQL任务中的参数使用问号(?)作为参数占位符。您可以在“执行SQL任务”的“参数映射”页面上将占位符映射到SSIS变量。在SQLStatement属性中,您将输入:

如果(?= 1)  开始   ... {这里有一些T-SQL} ...  结束 如果(?= 2)  开始   ... {这里有一些T-SQL} ...  端

这是实现我认为你要问的一种方式。

另一种方法是创建一个执行SQL任务,将数据库中的@parameter值读入SSIS变量。然后,您可以构建两个执行SQL任务 - 一个用于T-SQL的每个选项作为SQLStatement属性 - 并使用先前约束上的表达式来确定要执行的执行SQL任务。

希望这有帮助, :{>

答案 2 :(得分:0)

您不能使用执行SQL任务来运行Transact-SQL语句。

根据您要实现的目标设置条件SQL语句。

在执行SQL任务编辑器

  1. 在常规选项卡中,将SQLStatement留空。
  2. 在参数映射选项卡中,添加参数并将User :: Parameter变量映射到参数名称0。
  3. 在“表达式”选项卡中,将SQLStatementSource设置为

    (DT_NUMERIC,18,0)@ [User :: Parameter] == 1? ...查询1 ...:...查询2 ...