我有以下内容查询我必须与之交谈的链接服务器。
选择 * FROM
OPENQUERY(DWH_LINK,'SELECT * FROM TABLEA')
它通常会返回大部分数据,但有些行丢失了吗?
链接服务器来自oracle客户端
这是否是任何人遇到w / openquery的问题?
答案 0 :(得分:4)
我有完全相同的问题。
根本原因是您使用ODBC而不是OLE DB设置了链接服务器。
以下是我修复它的方法:
现在转到“安全”标签,然后点击最后一个单选按钮,上面写着“使用此安全上下文制作:”并输入用户名&您的连接密码
那应该是它!
答案 1 :(得分:0)
这似乎与底层提供程序功能有关,而其他人也遇到了这种和类似的大小/行限制。一种可能的解决方法是实现迭代/循环查询,其中内置一些过滤以回退一定量的行。使用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: link 这取决于OLE DB提供程序的功能。虽然查询可能返回多个结果集,但OPENQUERY只返回第一个结果集。
答案 2 :(得分:0)
使用Oracle 10即时客户端和ODBC时遇到了同样的问题。当我连接到Oracle 10gR2数据库时,我使用了这个客户端。我在Microsoft支持下打开了一张票,他们建议使用Oracle 11即时客户端。惊喜!卸载10g即时客户端,安装11g即时客户端并重新启动解决了问题。
肯
答案 3 :(得分:0)
我对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会强制它返回“所有行”。