避免在 OLE DB 数据源的查询中使用单行注释





1.00/5 (1投票)
OLE DB 提供程序会将所有查询打包成单行,因此所有注释子句后的查询文本都会被截断。
我知道这篇内容不足以构成一篇文章。我只是无法将它的 HTML 放到提示中 - 我在预览中看到了所有标签和其他内容... 所以如果你不同意这篇内容是文章,请跳过。想想那些真正需要这些信息的人,至少像这个线程中的人。谢谢。
引言
我不得不将一些使用 ADO.Net 数据源的 SSIS 包迁移到 OLE DB 数据源,因为涉及到 x64 和 Oracle。所有包都可以正常工作,所以我对切换到 OLE DB 数据源后出现的DataSource 错误感到惊讶。错误信息如下:
- ORA-00907:缺少右括号
- ORA-00903:无效的表名
- ORA-00904:字符串:无效的标识符
解决方案
OLE DB 提供程序会将所有查询打包成单个字符串,因此,如果在查询中包含注释,则其余查询将被截断。因此,请避免在要发送到 OLE DB 驱动程序的查询文本中使用注释。
代码
如果你有一个格式良好的 SQL 查询,例如:
select dummy
from
-- dummy table in Oracle
dual
那么 OLE DB 提供程序接收到的输入将是:
select dummy from --dummy table in Oracle dual
这我想肯定不是你期望的结果:)
历史
一旦我遇到 OLE DB 数据源的问题,我就获取了传递到查询字段的字符串的内容,并对其进行了彻底检查。结果没有缺少括号,所有表都存在,所有别名都正确。此外,我能够在 Toad for Oracle 中毫无困难地执行该 SELECT 语句。所以我确信该字符串在语法上是正确的。
最初的假设是提供程序中发生了一些奇怪的事情 - 也许字符串太长,并且在某个地方被截断了,但我有一个更长的查询,它在 OLE DB 数据源内的同一个包中成功执行了。
经过几个小时检查存在问题的查询(它有 11k 个字符),我选择了一个小型的查询,并且问题得以重现。很明显,问题在于查询中的注释。
所以我删除了查询中的所有注释,问题就解决了。