【发布时间】:2015-04-28 05:16:45
【问题描述】:
我正在尝试创建一个流程以将数据从 Oracle 表中提取到 SQL Server 表中。我正在向 Oracle 发送以下查询以获取数据:
select distinct CHLD.id,
nvl(chld_c_spl, 'N'),
to_char(chld_d_start, 'YYYY-MM-DD') chld_d_start,
to_char(chld_d_end, 'YYYY-MM-DD') chld_d_end
from child chld,
picture ptct
where CHLD.id = PTCT.chld_id
and nvl(chld_d_end, sysdate) >= to_date('01-JAN-2014')
and chld_c_veri in ('HC','DR')
and nvl(ptct_term, ptct_end) >= to_date('01-JAN-2014')
当我在 Oracle 中运行查询时,我返回了 505 行。当我执行 SSIS 包时,插入了 1,504 行。由于某种原因,SSIS 传递的查询似乎没有查看 ptct 表的 where 子句 (nvl(ptct_term, ptct_end) >= to_date('01-JAN-2014')),因为所有额外的行都是图片 (ptct) 表中没有有效条目。
有人对这里发生的事情有什么建议吗?原始查询在 ptct 表上使用了 exists 子句而不是 join,但它不起作用,所以我转换为 join。当存在子句时,看到的结果与上述类似。
【问题讨论】:
-
你能扩展一下你的 SSIS 包吗?当您将查询发送到 oracle 时,您是否通过执行 SQL 任务执行此操作,为您的 Oracle DB 设置特定的连接字符串?还是您使用的是 OLEDB 源?执行包时是否通过暂存区发送结果集或查询暂存区?
-
我使用 Oracle 连接管理器将数据流任务与 OLE DB 源一起使用。 Oracle 连接管理器正在使用 Oracle Provider for OLE DB,而 db 在 tnsnames.ora 文件中定义。数据访问模式 = SQL 命令和 SQL 命令文本 = 上面的查询。然后我只是将它发送到 ADO NET 目标,该目标是 SQL Server 连接,直接连接到查询中包含 4 列的表中。
标签: sql-server oracle ssis sql-server-2008-r2