SQL:OPENQUERY不返回所有行

我有以下查询链接服务器,我必须与之交谈。 选择               * 从 OPENQUERY(DWH_LINK,'SELECT * FROM TABLEA') 它通常会返回大部分数据,但有些行丢失了吗? 链接服务器来自oracle客户端 这是一个任何人遇到w / openquery的问题吗?     
已邀请:
我有完全相同的问题。 根本原因是您使用ODBC而不是OLE DB设置了链接服务器。 以下是我修复它的方法: 从SQL Server中删除链接的服务器 右键单击“Linked Servers”文件夹并选择“New Linked Server ...” 链接服务器:输入任何内容..这将是新链接服务器的名称 提供者:选择“Oracle Provider for OLE DB” 产品名称:输入“Oracle”(不带双引号) 数据源:从TNSNAMES.ORA文件中输入别名。就我而言,它是“ABC.WORLD”(没有双引号) 提供者字符串:将其留空 位置:留空 目录:留空 现在转到“安全”选项卡,然后单击最后一个显示“使用此安全上下文创建的单选按钮:”并输入用户名&您的连接密码 那应该是它!     
这似乎与底层提供程序功能有关,而其他人也遇到了这种和类似的大小/行限制。一种可能的解决方法是实现迭代/循环查询,其中内置一些过滤以回退一定量的行。使用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 ...')
BOL: 链接 这取决于OLE DB提供程序的功能。虽然查询可能返回多个结果集,但OPENQUERY只返回第一个结果集。     
我使用Oracle 10即时客户端和ODBC也遇到了同样的问题。当我连接到Oracle 10gR2数据库时,我使用了这个客户端。我在Microsoft支持下打开了一张票,他们建议使用Oracle 11即时客户端。惊喜!卸载10g即时客户端,安装11g即时客户端并重新启动解决了问题。 肯     
我对SQL 2014通过OPENQUERY从SQL 2000获取数据时遇到了同样的问题。因为ODBC兼容性问题,我不得不为ODBC驱动程序保留通用OLE DB。而且,问题仅在于SQL非管理员帐户。 最后,我找到的解决方案是添加SET ROWCOUNT 0:
SELECT * FROM OPENQUERY(DWH_LINK, 'SET ROWCOUNT 0 SELECT * FROM TABLEA ')
似乎rowcount可能在某个地方通过SQL过程(或对于此用户会话)进行了更改,因此将其设置为0会强制它返回“所有行”。     

要回复问题请先登录注册