Tsql 需要在oledb源中加入oracle和sql server表,而不使用链接服务器

Tsql 需要在oledb源中加入oracle和sql server表,而不使用链接服务器,tsql,ssis,Tsql,Ssis,我的ssis包有一个oledb源,它连接oracle和sql server以获取源数据并将其加载到sql server oledb目标。早些时候,我们使用链接服务器用于此目的,但我们不能再使用链接服务器 因此,我从SQLServer获取数据,并希望将其返回到oracle查询的in子句中,我将其保留为sql命令oledb source 我尝试从sql server解析一个对象类型变量,并将其放入oledb source中oracle查询的in子句中,但得到的错误是oracle在in语句中不能有超过

我的ssis包有一个oledb源,它连接oracle和sql server以获取源数据并将其加载到sql server oledb目标。早些时候,我们使用链接服务器用于此目的,但我们不能再使用链接服务器

因此,我从SQLServer获取数据,并希望将其返回到oracle查询的in子句中,我将其保留为sql命令oledb source

我尝试从sql server解析一个对象类型变量,并将其放入oledb source中oracle查询的in子句中,但得到的错误是oracle在in语句中不能有超过1000个文本。所以基本上我认为我必须这样做:

从oracle.db中选择*,其中id在select id from sqlserver.db中

因为我不能使用链接服务器,所以我在考虑是否可以在整个包中使用临时表

我尝试了在ssis中使用合并联接的另一种方法。但是我的源数据集非常大,合并联接返回的行数比ExpeetD少。我在这一点上陷入了困境。我试过一个数字,如果事情似乎不起作用


有人能帮忙吗。任何帮助都将不胜感激。

有几个选项可以尝试

查找:

我的第一反应是查找任务,但这可能不是一个很好的解决方案,具体取决于数据集的大小,因为两个表中的所有记录都必须经过连接并存储在SSIS服务器上的内存中。但是,如果您能够实现合并联接,那么查找也应该可以工作,但可能会很慢

设置OLE DB源以提取Oracle数据,而不使用WHERE子句。 设置查找以从SQL Server表中提取id列。 在查找的“常规”选项卡上,在“指定如何处理没有匹配项的行”下,选择“将行重定向到不匹配输出”

查找的输出将只是在SQL Server查询中找到匹配行的Oracle行

Oracle服务器上的工作表

如果您可以选择在Oracle数据库中创建表,则可以创建数据流任务,将SQL Server查询的结果通过管道传输到Oracle box上的工作表中。然后,在随后的数据流中,只需构造Oracle查询,将该工作表用作过滤器

接下来可能会执行一个executesql任务来截断该工作表


尽管这需要对Oracle进行写访问,但它的优点是将繁重的查询任务卸载到数据库机器上,并且只需将您关心的行拖过网络即可

嗨,埃里克,谢谢你的帮助。我正在使用查找,它工作正常,但存在一个问题。因此,我的oracle源代码是一个查询。当我使用链接服务器运行该查询时,得到的行数比从oledb源流出的行数还要多。因此,我使用Ado net源代码和Ado net目标,但这需要很长时间。您知道为什么oeldb源不返回所有行吗??非常感谢。不幸的是,我对您的行数问题没有任何见解。我听说过这种情况,但我没有经历过,所以我从未深入研究过。嘿,Eric,还有一个问题,oracle查询正在查找sql server表的id值,只应传递匹配的行。但它正在尝试发送所有sql server查找id col值,该值具有与它没有的oracle id对应的空值,并且将出现错误。嘿,发生此问题是因为忽略失败选项。我将其更改为将行重定向到不匹配的输出。现在我只得到匹配的行。谢谢你的帮助!阿克。对不起!我将很快更新答案。很高兴你让它工作了。