2010-12-15 118 views
1

我有以下查询链接服务器,我必须与之交谈。SQL:OPENQUERY不返回所有行

选择 * FROM

OPENQUERY(DWH_LINK, 'SELECT * FROM TABLEA')

它通常会返回大多数的数据,但有一些行?

的linkeds服务器是从Oracle客户端

这是任何人都遇到了W/OPENQUERY一个问题来了吗?

+0

有另一种方式来访问数据的其他链接的服务器比使用OPENQUERY – Bill 2010-12-15 21:44:26

回答

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只返回第一个结果集。

3

我有完全相同的问题。

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

以下是我固定它:

  • 删除从SQL Server
  • 的“链接服务器”文件夹,右键单击并选择链接服务器“新建链接服务器......”
  • 链接服务器:进入anything..this将是您新的链接服务器的名称
    • 提供商:选择“Oracle提供的OLE DB”
    • 产品名称:进入“甲骨文”(没有双q备注)
    • 数据源:从您的TNSNAMES.ORA文件输入别名。就我而言,这是 “ABC.WORLD”(不包括双引号)
    • 提供字符串:留空
    • 地点:留空
    • 目录:留空

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

这应该是它!

+0

真棒 - 这是我正是问题。我不能相信ODBC驱动程序会出现这样的错误,但是这种情况,现在它已被纠正:) – SqlRyan 2013-09-19 17:18:53

+0

我们也遇到了这个问题,这是决议。为了增加我们最初的困惑,SELECT *展示的FETCH FIRST行为在WHERE子句使用7列中的3列时显示出来......使用其他4列或在没有WHERE的情况下运行,返回了预期结果。 – 2014-02-21 14:25:31

+0

切换(从ODBC驱动程序的Microsoft OLE DB提供程序)到** Oracle OLE DB **提供程序工作。谢谢。确保您匹配x64 - >(64位Oracle数据访问组件(ODAC)下载)到SQL服务器。谢谢。 – Finkel 2016-02-03 17:57:46

0

我有使用Oracle 10即时客户端和ODBC的相同问题。我在连接到Oracle 10gR2数据库时使用了此客户端。我在微软的支持下打开了一张票,他们建议使用Oracle 11即时客户端。惊喜!卸载10g即时客户端,安装11g即时客户端并重新启动解决了问题。