微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用WHERE子句“ IN”关键字创建SSIS- SQL任务Oracle SQL语句

如何解决使用WHERE子句“ IN”关键字创建SSIS- SQL任务Oracle SQL语句

我真的希望我能对此有所投入。我正在尝试使用WHERE子句中带有“ IN”的sql语句创建SSIS包(例如:SELECT * FROM Oracle.Table1 WHERE Col1 IN(?))。基本上,是带有sql Server表中的值的Oracle sql语句。我搜索了,找不到任何东西。任何建议将不胜感激:

  1. 我可以对对象变量中的值使用“ IN”关键字吗?
  2. 我已经看到了使用“ ForEach”组件的方法。这不会为每个值创建一个SELECT语句吗?可能有成千上万的记录。

我尝试了以下操作:

  1. 与以下语句一起使用的sql命令:SELECT * FROM Oracle.Table1 WHERE Col1 IN(?)-其中?是一个对象变量(sql Server语句的结果集1 col) 当我尝试选择“参数”时,出现错误消息。

  2. 使用来自变量的sql命令以及变量中的表达式:“ SELECT * FROM Oracle.Table1 WHERE Col1 IN(“ + @ [[User :: Obj_values] +”)“

仅供参考:我仅具有对Oracle DB的读取权限:(

解决方法

热门问题

  1. 否,如果SSIS变量的类型为Object,则您无法在表达式语言中执行任何操作

  2. 是的,foreach方法将需要对数组中的每个元素进行单独的查询。

您尝试过的问题

  1. 参数替换不适用于值列表-如您所见

  2. Oracle支持
  3. In,因此该方法可以工作,但是您必须a)使用字符串数据类型b)滚动自己的逻辑来构建分隔列表。在C#任务中,它可能与string.Join(",",Dts.Variables["User::Obj_values"].Value.ToArray());一样琐碎,但可能不取决于您如何填充对象数组的基本伏都教徒

其他方法

根据卷的大小以及SQL Server中的键是否可以与Oracle中的键(0到1)或(0到许多)匹配,您可以将数据流写为

  • OLE DB源(SQL Server查询)
  • 查找组件(Oracle)
  • 任何目的地

在这种方法中,首先从过滤后的值列表开始,然后将其与Oracle中的参考表进行比较。是的,如果参考表是“纽约证券交易所自成立以来的所有交易”,那是行不通的,但是如果它是“我的所有客户”,则可以将这些数据带入查找组件。

您可以尝试通过在部分缓存模式下使用“查找”来拆分差异。在这种方法中,除非将整个目标表都拉到内存中,否则它会针对每个元素触发查询,除非它已经看到了键,在这种情况下它将重新使用本地缓存的值。在这种方法和foreach枚举器方法之间,我更喜欢通过lookup组件触发查询,因为您不必为每次数据流任务的开始支付验证开销。假设这是Oracle,则假定您有一个OLE DB连接管理器可用。否则,您将不得不使用“缓存连接管理器”,并且顾名思义,它只能缓存预定义的数据。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。