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