【问题标题】:How to use SSIS Variable to construct SQL statement with IN clause如何使用 SSIS 变量构造带有 IN 子句的 SQL 语句
【发布时间】:2014-05-22 20:40:55
【问题描述】:

我想知道是否有人可以在这里帮助我。我想构建一个类似这样的动态 sql 命令

SELECT * from Table1 Where CID > 10 + and LID in (11,12,15,20)

为此我设置了两个变量并设置如下表达式

"SELECT * from Table1 Where CID >" + (@User:Var1) + "and LID in "+(@User:Var2)

var1 是从单行 sql 任务结果集生成的 Int64 类型,它工作正常,而 Var2 是 Object 类型,我无法让 Var2 在上述语句中替换“和 Lid (11, 12,15,20)”。

任何帮助将不胜感激

【问题讨论】:

  • 您是否收到错误消息?
  • 问得好,最重要的是,您的 Var2 并非设计为以这种方式工作。如果您可以向我提供一些关于您计划如何处理 select 语句中的记录的其他信息,我们可以考虑解决此问题。
  • 嗨哥斯拉,感谢您的回复,我想做的就是在数据流任务上使用表达式构建动态 sql。该声明将包括来自两个 var 的详细信息。第一个是可以正常工作的单个值,第二个是我需要用逗号转置为“in (11,12,15,20)”的列表。我的语句应该看起来像这样 SELECT * from Table1 Where CID > @@10@@ and LID in @@(11,12,15,20)@@。 @@ 之间的项目应该来自变量。
  • 你不能在 SSIS 表达式中使用 Object 类型的变量。您将需要使用脚本任务将@[User::Var2] 中的类数组对象转换为字符串

标签: variables ssis sqlcommand


【解决方案1】:

我不确定这是否是您要查找的内容,我以 AdventureWorks 的表格为例。

Declare @var1 int = 10
Declare @var2 varchar(100) = '(11,12,15,20)'

Declare @sql varchar(max) 
=   'SELECT * FROM  [dbo].[DimEmployee] WHERE EmployeeKey > ' + 
    CAST(@var1 as varchar(10)) + ' AND ParentEmployeeKey IN ' +
    @var2

Exec(@sql)

如果没有用则忽略。

【讨论】:

  • 这是一个有趣的解决方案,这是否适用于 SSIS 作为表达式?我的主要问题是如何将结果集从具有值列表的对象类型变量转换为可以在 IN CLAUSE 中用作 (11,12,15,20) 的东西。
  • 暗部找到解决办法了吗?
  • 还没有,但正在使用脚本任务与每个循环容器来读取列表项并将另一个变量传递给它并在表达式中使用它。这是 SSIS 大师的建议.. :-) 我已经完成了一半。
猜你喜欢
  • 1970-01-01
  • 2023-03-17
  • 2010-11-05
  • 1970-01-01
  • 2023-02-16
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多