SSIS使用参数执行SQL任务

时间:2013-07-01 21:59:36

标签: ssis

我需要根据参数执行sql任务。 让我们说如果我的@parameter = 1然后执行这个sql如果@parameter = 2然后执行这个sql。我想到一个解决方法,但有任何直接的东西,如Len(?)或Len(@ parameter1)..

底线:我需要根据传递给参数的内容执行sql查询。 如果可能,请告诉我。

2 个答案:

答案 0 :(得分:2)

如果您希望执行SQL任务基于变量运行不同的存储过程,则有几个选项:

  1. 您可以创建一个带参数的存储过程。存储过程将使用IF ELSE代码执行代码,如Lamak的评论中所述。如果要执行不同的存储过程,这是一个不太理想的解决方案。如果您只需要执行非常少量的查询或存储过程,这可能会有效。

  2. 您可以编写一个变量,根据表达式计算存储过程的名称。如果您只有少量存储过程要执行,这可能会很好,但它不能扩展到大量存储过程。从编码的角度来看也很难理解,特别是如果表达式很复杂的话。

  3. 您可以编写一个生成单独的存储过程调用命令的查询或存储过程。您可以运行执行SQL任务来加载结果集。结果集将映射到Object数据类型的变量。然后,您可以遍历For Each Container中的变量,为变量赋值。如果你有很多不同的代码,那么比100个表达式更容易管理。

  4. 根据您对我的评论,您似乎想尝试选项2.以下是选项2的详细步骤:

    1. 在包级别范围的“变量”窗口中,创建一个名为SqlCommand的变量,数据类型为String。

    2. 将SqlCommand变量的EvaluateAsExpression属性设置为True。

    3. 单击表达式构建器链接。

    4. 以下是使用条件运算符的IF THEN ELSE表达式示例。

      1 == 0? “SELECT SomeField = GETDATE();” :“SELECT SomeField = GETDATE() - 2;”

      如果1等于0,则返回第一个命令。如果1不等于0,则返回第二个命令。在这种情况下,由于1不等于0,因此返回第二个命令。您可以将1 == 0部分更改为您实际要评估的条件。

    5. 将执行SQL任务添加到控制流程中。

    6. 打开“执行SQL任务编辑器”。

    7. 将Connection设置为所需的数据库连接管理器。

    8. 设置SQLSourceType = Variable。

    9. 将SourceVariable设置为User :: SqlCommand。

    10. 关闭编辑器并测试包。

答案 1 :(得分:1)

user1810575已在ssis-execute-sql-task-based-on-parameter中再次提出此问题,请参阅我的回答(此处也会复制)。

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

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

在执行SQL任务编辑器

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

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