如何解决使用WHERE子句“ IN”关键字创建SSIS- SQL任务Oracle SQL语句
我真的希望我能对此有所投入。我正在尝试使用WHERE子句中带有“ IN”的sql语句创建SSIS包(例如:SELECT * FROM Oracle.Table1 WHERE Col1 IN(?))。基本上,是带有sql Server表中的值的Oracle sql语句。我搜索了,找不到任何东西。任何建议将不胜感激:
我尝试了以下操作:
-
与以下语句一起使用的sql命令:SELECT * FROM Oracle.Table1 WHERE Col1 IN(?)-其中?是一个对象变量(sql Server语句的结果集1 col) 当我尝试选择“参数”时,出现错误消息。
-
使用来自变量的sql命令以及变量中的表达式:“ SELECT * FROM Oracle.Table1 WHERE Col1 IN(“ + @ [[User :: Obj_values] +”)“
仅供参考:我仅具有对Oracle DB的读取权限:(
解决方法
热门问题
-
否,如果SSIS变量的类型为Object,则您无法在表达式语言中执行任何操作
-
是的,foreach方法将需要对数组中的每个元素进行单独的查询。
您尝试过的问题
-
参数替换不适用于值列表-如您所见
Oracle支持 -
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 举报,一经查实,本站将立刻删除。