SSIS 数据流,忽略 SQL 语句中的 where 子句

Posted

技术标签:

【中文标题】SSIS 数据流,忽略 SQL 语句中的 where 子句【英文标题】:SSIS Data Flow, ignoring where clause in SQL Statement 【发布时间】:2019-02-01 14:47:49 【问题描述】:

使用 Visual Studio 2017 和 SSIS。

从 Oracle 到 SQL Server 的基本数据流。

Oracle 是源 (OLEDB),SQL Server 是目标(OLEDB 也是)。

我正在使用的 SQL 命令

SELECT * FROM CASE_NOTE WHERE
CREATE_DT <= '31-DEC-2010 00.00.00'

但是,数据流忽略 WHERE 并迁移所有行。

此外,数据流将显示 150 万行,其中 750,000 行已提交(源只有 750,000 行)。

这是一种奇怪的行为,我无法找出问题所在。

我尝试过从 OLEDB 转到 ADO.NET 并得到相同的结果。

我已删除 where 子句,但数据流中的 2x 行仍然存在

【问题讨论】:

【参考方案1】:

解析字符串到日期的问题?

你可以试试这个方法吗:

SELECT * FROM CASE_NOTE WHERE CREATE_DT <= '2010-DEC-31'

另一个引人注目的事情是您使用 OLEDB Oracle 源提供程序。

当您全新安装 SSIS 时,这可能是明显的默认选项,但是,Microsoft 提供了另一个性能更高且更可取的选择:

Microsoft Connectors for Oracle and Teradata by Attunity for Integration Services (SSIS)

也许这种替代方案会为您带来更好的 SSIS 体验

【讨论】:

谢谢,我在使用该查询时收到“Not a Valid Month”错误 然后可能是 12 月而不是 12 月。我调整了答案。它背后的想法是 SSIS 是一个 MS 工具,并且有与区域设置无关的日期格式的概念......但是我在你的问题中添加了 oracle 标签,所以也许 oracle 专业人士也可以提出他们的答案 @NicholasLea-Trengrouse,我已经添加了关于 Oracle Attunity 提供者的额外信息。 谢谢,是的,我之前在其他客户网站上使用过 Attunity。它没有安装在这里,所以没有使用它。我会安装它,看看效果如何。 应该是'31-DEC-2010'

以上是关于SSIS 数据流,忽略 SQL 语句中的 where 子句的主要内容,如果未能解决你的问题,请参考以下文章

如果条件不满足,派生列表达式SSIS如何忽略表达式?

SSIS高级转换任务—执行SQL语句

选择语句从 Netezza 数据库中获取数据并插入 SQL Server 数据库 (SSIS)

由于 174 个 UNION ALL 语句,SQL Server 查询 SSIS 转换超时

SQL VIEW(视图)

在 SSIS 中编写案例语句