SQL:OPENQUERY 不返回所有行

Bil*_*ill 5 t-sql

我有以下查询我必须与之交谈的链接服务器。

选择 * 从

OPENQUERY(DWH_LINK, 'SELECT * FROM TABLEA ')

它通常会返回大部分数据,但缺少某些行?

链接服务器来自 oracle 客户端

这是有人在使用 openquery 时遇到过的问题吗?

小智 5

我遇到了完全相同的问题。

根本原因是您使用 ODBC 而不是 OLE DB 设置了链接服务器。

这是我修复它的方法:

  • 从 SQL Server 中删除链接服务器
  • 右键单击“链接服务器”文件夹并选择“新建链接服务器...”
  • 链接服务器:输入任何内容..这将是您的新链接服务器的名称
    • 提供程序:选择“用于 OLE DB 的 Oracle 提供程序”
    • 产品名称:输入“Oracle”(不带双引号)
    • 数据源:输入来自 TNSNAMES.ORA 文件的别名。就我而言,它是“ABC.WORLD”(没有双引号)
    • 提供者字符串:留空
    • 位置:留空
    • 目录:留空

现在转到“安全”选项卡,然后单击最后一个单选按钮“使用此安全上下文:”并输入连接的用户名和密码

应该是这样!


Mik*_*Cov 1

这似乎与底层提供程序的功能有关,其他提供程序也遇到了这种限制和类似的大小/行限制。一种可能的解决方法是实现迭代/循环查询,并内置一些过滤来拉回一定数量的行。对于oracle,我认为这可能是使用rownum(对oracle不是很熟悉)。

所以像

--Not tested sql, just winging it syntax-wise
SELECT * FROM OPENQUERY(DWH_LINK, 'SELECT * FROM TABLEA where rownum between 0 AND 500')
SELECT * FROM OPENQUERY(DWH_LINK, 'SELECT * FROM TABLEA where rownum between 500 AND 1000')
SELECT * FROM OPENQUERY(DWH_LINK, 'SELECT * FROM TABLEA where rownum ...')
Run Code Online (Sandbox Code Playgroud)

BOL: 链接 这取决于 OLE DB 提供程序的功能。尽管查询可能返回多个结果集,但 OPENQUERY 仅返回第一个结果集。