首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建带有WHERE子句"IN“关键字的SSIS- SQL任务Oracle SQL语句

问创建带有WHERE子句"IN“关键字的SSIS- SQL任务Oracle SQL语句
EN

Stack Overflow用户
提问于 2020-09-15 03:03:33
回答 1查看 523关注 0票数 1

我真的希望我能在这方面得到一些意见。我试图在WHERE子句中使用带有" in“的SQL语句创建一个SSIS包(ex: SELECT * FROM Oracle.Table1 WHERE Col1 IN (?) )。基本上,一个带有Server表值的Oracle SQL语句。我搜索过什么也找不到。如有任何建议,将不胜感激:

  1. 我可以在对象变量中使用带值的" in“关键字吗?
  2. 我见过使用"ForEach“组件的方法。这不是为每个值创建一个SELECT语句吗?可能有上千条记录。

我试过以下几种方法:

  1. 使用statement语句: SELECT * FROM Oracle.Table1 WHERE Col1 IN (?) -哪里?是一个对象变量( Server语句中的结果集1 col ),当我试图选择“参数”时,会收到一条错误消息。
  2. 使用SQL变量和变量中的表达式:"SELECT * from Oracle.Table1 Col1 in (“+ @User::Obj_values + ")”

FYI:我只读取Oracle DB的权限:(

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-15 14:39:28

最重要问题

  1. 不,如果SSIS变量是对象类型,则不能在表达式语言中执行任何操作。
  2. 是的,foreach方法将涉及数组中每个元素的单独查询。

你试过的问题

  1. 参数替换不适用于值列表-正如您所观察到的
  2. Oracle支持在……里面,所以这种方法可以工作,但是您必须( a)使用字符串数据类型b)滚出自己的逻辑来构建分隔列表。在C#任务中,它可能与string.Join(",", Dts.Variables["User::Obj_values"].Value.ToArray());一样琐碎,但可能不取决于您如何填充对象数组的底层伏都教。

其他方法

根据数量以及Server中的键在Oracle中是否匹配(0到1)或(0对多),您可以将数据流写成

  • OLE源( Server查询)
  • 查找组件(Oracle)
  • 无论目的地是什么

在这种方法中,从筛选的值列表开始,然后将其与Oracle中的引用表进行比较。如果引用表是“纽约证券交易所自成立以来的所有交易”,那是行不通的,但如果它是“所有我的客户”,那么您可能可以将这些数据带到查找组件中。

您可以尝试在部分缓存模式下使用查找来分割差异。在这种方法中,它不是将整个目标表拖到内存中,而是为每个元素触发一个查询,除非它已经看到了键,在这种情况下,它会重新使用本地缓存的值。在这种方法和foreach枚举器方法之间,我倾向于通过查找组件触发查询,因为您不必为数据流任务的每次启动支付验证开销。考虑到这是Oracle,这假定您有一个OLE DB连接管理器可用。否则,您必须使用Cache连接管理器,顾名思义,它只能缓存预定义的数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63894458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档