3

我需要根据参数执行sql任务。假设我的@parameter = 1 然后执行这个sql 如果@parameter = 2 然后执行这个sql。我想到了一种解决方法,但是有什么直接的方法,例如 Len(?) 或 Len(@parameter1) ..

底线:我需要根据传递给参数的内容执行 sql 查询。让我知道这是否可能。

4

2 回答 2

2

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

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

  2. 您可以编写一个变量,根据表达式计算存储过程的名称。如果您只有几个存储过程要执行,这可能会很好,但它不适用于大量存储过程。从编码的角度来看也很难理解,尤其是在表达式很复杂的情况下。

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

根据您对我的评论,听起来您想尝试选项 2。以下是选项 2 的详细步骤:

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

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

  3. 单击表达式生成器链接。

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

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

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

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

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

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

  8. 设置 SQLSourceType = 变量。

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

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

于 2013-07-01T23:43:01.593 回答
1

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

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

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

在执行 SQL 任务编辑器中

  • 在一般选项卡中,将 SQLStatement 留空。
  • 在参数映射选项卡中,添加参数并将 User::Parameter 变量映射到 Parameter Name 0。
  • 在 Expression 选项卡中,将 SQLStatementSource 设置为

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

于 2013-07-03T07:24:51.267 回答