我需要根据参数执行sql任务。 假设如果我的@parameter = 1,则执行此sql;如果@parameter = 2,则执行此sql。我想到了一个解决办法,但是有没有什么直接的办法,比如 Len(?) 或 Len(@parameter1) ..
底线:我需要根据传递给参数的内容执行sql查询。 如果可能的话请告诉我。
最佳答案
如果您希望执行 SQL 任务基于变量运行不同的存储过程,那么有几个选项:
您可以创建一个带有参数的存储过程。存储过程将使用 IF ELSE 代码来执行 Lamak 注释中描述的代码。如果您想执行不同的存储过程,那么这不是一个理想的解决方案。如果您只有极少量的查询或存储过程要执行,这可能会起作用。
您可以编写一个变量来根据表达式计算存储过程的名称。如果您只有几个存储过程要执行,那么这可能会很有效,但它无法扩展到大量存储过程。从编码的角度来看,它也很难理解,特别是当表达式很复杂时。
您可以编写一个查询或存储过程来生成单独的存储过程调用命令。您可以运行执行 SQL 任务来加载结果集。结果集将映射到对象数据类型的变量。然后,您可以迭代 For Each Container 中的变量来为变量赋值。如果您有大量代码需要更改,则比 100 个表达式更容易管理。
根据您对我的评论,听起来您想尝试选项 2。以下是选项 2 的详细步骤:
在包级别范围的“变量”窗口中创建一个名为 SqlCommand、数据类型为 String 的变量。
将 SqlCommand 变量的 EvaluateAsExpression 属性设置为 True。
单击表达式生成器链接。
以下是使用条件运算符的 IF THEN ELSE 表达式示例。
1 == 0 ? “选择一些字段= GETDATE();” : "SELECT SomeField = GETDATE() - 2;"
如果 1 等于 0,则返回第一个命令。如果 1 不等于 0,则返回第二条命令。在这种情况下,由于 1 不等于 0,因此返回第二个命令。您可以将 1 == 0 部分更改为您实际想要评估的条件。
将执行 SQL 任务添加到控制流。
打开执行 SQL 任务编辑器。
将连接设置为所需的数据库连接管理器。
设置 SQLSourceType = 变量。
将 SourceVariable 设置为 User::SqlCommand。
关闭编辑器并测试包。
关于SSIS带参数执行SQL任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17414391/