2

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

4

3 回答 3

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中的使用顺序,你不需要在Execute SQL Task Editor//Parameters的用户界面上改变它们的顺序。这就是安迪伦纳德后来在他的回应中提出的建议。

于 2013-07-02T19:01:30.397 回答
0

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

If (?=1) begin ... {some T-SQL here} ... end If (?=2) begin ... {some T-SQL here} ... end

这是完成我认为您所要求的一种方法。

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

希望这会有所帮助,:{>

于 2013-07-02T16:37:07.053 回答
0

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

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

在执行 SQL 任务编辑器中

  1. 在一般选项卡中,将 SQLStatement 留空。

  2. 在参数映射选项卡中,添加参数并将 User::Parameter 变量映射到 Parameter Name 0。

  3. 在 Expression 选项卡中,将 SQLStatementSource 设置为

    (DT_NUMERIC, 18, 0) @[用户::参数]==1 ? ...查询 1... : ...查询 2...

于 2013-07-03T06:09:56.053 回答