我可以做下面的事情,让我知道 IF @ parameter = 1 BEGIN ... query ... END IF @ parameter = 2 如果可能,需要正确的语法。 这是OLE DB连接。 不是存储过程只是一个SQL查询
答案 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任务编辑器
中在“表达式”选项卡中,将SQLStatementSource设置为
(DT_NUMERIC,18,0)@ [User :: Parameter] == 1? ...查询1 ...:...查询2 ...