我需要根据参数执行sql任务。假设我的@parameter = 1 然后执行这个sql 如果@parameter = 2 然后执行这个sql。我想到了一种解决方法,但是有什么直接的方法,例如 Len(?) 或 Len(@parameter1) ..
底线:我需要根据传递给参数的内容执行 sql 查询。让我知道这是否可能。
我需要根据参数执行sql任务。假设我的@parameter = 1 然后执行这个sql 如果@parameter = 2 然后执行这个sql。我想到了一种解决方法,但是有什么直接的方法,例如 Len(?) 或 Len(@parameter1) ..
底线:我需要根据传递给参数的内容执行 sql 查询。让我知道这是否可能。
如果您希望执行 SQL 任务基于变量运行不同的存储过程,那么有几个选项:
您可以创建一个带有参数的存储过程。存储过程将使用 IF ELSE 代码来执行 Lamak 评论中描述的代码。如果您想执行不同的存储过程,这不是一个理想的解决方案。如果您只有非常少量的查询或存储过程要执行,这可能会起作用。
您可以编写一个变量,根据表达式计算存储过程的名称。如果您只有几个存储过程要执行,这可能会很好,但它不适用于大量存储过程。从编码的角度来看也很难理解,尤其是在表达式很复杂的情况下。
您可以编写生成单独的存储过程调用命令的查询或存储过程。您可以运行执行 SQL 任务来加载结果集。结果集将映射到 Object 数据类型的变量。然后,您可以遍历 For Each Container 中的变量以将值分配给变量。如果您有很多代码需要更改,则比 100 个表达式更容易管理。
根据您对我的评论,听起来您想尝试选项 2。以下是选项 2 的详细步骤:
在包级范围的“变量”窗口中,创建一个名为 SqlCommand 的数据类型为 String 的变量。
将 SqlCommand 变量的 EvaluateAsExpression 属性设置为 True。
单击表达式生成器链接。
以下是使用条件运算符的示例 IF THEN ELSE 表达式。
1 == 0?“选择 SomeField = GETDATE();” :“选择 SomeField = GETDATE() - 2;”
如果 1 等于 0,则返回第一个命令。如果 1 不等于 0,则返回第二个命令。在这种情况下,由于 1 不等于 0,所以返回第二个命令。您可以将 1 == 0 部分更改为您实际想要评估的条件。
将执行 SQL 任务添加到控制流。
打开执行 SQL 任务编辑器。
将连接设置为所需的数据库连接管理器。
设置 SQLSourceType = 变量。
将 SourceVariable 设置为 User::SqlCommand。
关闭编辑器并测试包。
user1810575 在ssis-execute-sql-task-based-on-parameter中再次提出了这个问题,请参阅我的答案(也复制到此处)。
您不能使用执行 SQL 任务来运行 Transact-SQL 语句。
用于根据您要实现的目标设置条件 SQL 语句。
在执行 SQL 任务编辑器中
在 Expression 选项卡中,将 SQLStatementSource 设置为
(DT_NUMERIC, 18, 0) @[用户::参数]==1 ? ...查询 1... : ...查询 2...