无法从OLE DB提供程序'ProviderName'获取链接服务器'LinkedServerName'的行数据

时间:2011-01-24 17:22:00

标签: oracle oledb linked-server

当我尝试执行涉及链接服务器到Oracle的此查询时,我遇到了这个问题。找到下面的查询,

SELECT DISTINCT Convert(nvarchar(100),A.ZIP_CD)
               ,Convert(nvarchar(100),A.CITY)
               ,Convert(nvarchar(100),A.ST_CD)
               ,Convert(nvarchar(100),E.PCT)
               ,Convert(nvarchar(100),B.DEFAULT_DEL_CHG)
               ,Convert(nvarchar(100),E.DEL_TAX)

FROM [LIVE]..[CUSTOM].MASTER_ZIP A,
     [LIVE]..[MISC].ZONE B,
     [LIVE]..[MISC].ZIP2ZONE C,
     [LIVE]..[MISC].ZIP2TAX D,
     [LIVE]..[SALES].TAT E
WHERE A.ZIP_CD = C.ZIP_CD
AND ISNULL(B.DEFAULT_DEL_CHG,0) <> 0
AND A.USPS_PRIM = 'P'
AND C.ZONE_CD = B.ZONE_CD
AND A.ZIP_CD = D.ZIP_CD
--AND decode(D.TAX_CD,'999','99',d.tax_cd) = E.TAT_CD
AND (Case When D.TAX_CD = '999' Then '99' Else D.TAX_CD End) = E.TAT_CD

这是我得到的错误,

  

无法从OLE DB提供程序“OraOLEDB.Oracle”获取链接服务器“LIVE”的行数据。

我发现在一个论坛上说试图转换为nvarchar,因为Oracle在sql server中转换数字时出现问题,但我仍然遇到同样的错误。

有关如何解决此问题的任何想法?感谢。

5 个答案:

答案 0 :(得分:4)

对于我迄今为止所发现的内容,有一些事情可能会触发此错误。

  • 更多返回100个结果。有些人在将“前100名”作为最大结果添加时,会查询他们的查询。
  • 有些人声称你应该使用openquery()和table(包括服务器)的完全限定路径来对链接数据库执行查询。
  • 其他人说这是传递的日期格式不兼容。

去看看哪一个,我还没有找到解决方案,但也许这3个中的一个会帮助你。

答案 1 :(得分:2)

在包含sqlserver表和包含Oracle上的openquery的视图之间的连接的视图上存在此问题。

select * 
FROM vwFMC01 
WHERE LOCATIONNAME = '1001002' works ok, but

select * 
FROM vwFMC01 
WHERE LOCATIONNAME = '1001003' fails!

Join在两个varchar(255)字段上。 解决了将连接字段转换为char(50)的问题:

select E.EMPLOYEENUMBER, 
    E.INITIALS, 
    E.NAME1, 
    E.LOCATIONNAME,
    L.DESCRIPTION, 
from biz_tblEmployee E
inner join vwGerpLocation L 
    on convert(char(50), E.LOCATIONNAME) = convert(char(50), L.LOCATIONNAME)

答案 2 :(得分:1)

首先,您需要为这些列提供列别名。

执行SELECT DISTINCT 'abc' ABC ...时会发生什么?

答案 3 :(得分:1)

我们遇到了类似的错误。

  

无法从OLE DB提供程序获取该行的数据   链接服务器“LINKEDSERVER”的“OraOLEDB.Oracle”。 [SQLSTATE 42000]   (错误7346)链接服务器的OLE DB提供程序“OraOLEDB.Oracle”   “LINKEDSERVER”返回消息“ORA-01403:未找到数据”

事实证明,SQL Server数据库的可比性从2008年改为2014年。最终破坏了一些索引。我们回滚了更改并重试了查询而没有任何问题。

由于2014兼容模式对我们很重要,我们再次将其更改为2014,重建了索引,这似乎消除了这些问题。希望这能帮助w.w.w中的其他人。

答案 4 :(得分:0)

更改

... AND (Case When D.TAX_CD = '999' Then '99' Else D.TAX_CD End) = E.TAT_CD

... AND (Case When D.TAX_CD = '999' Then '99' Else D.TAX_CD End) Like E.TAT_CD