当我尝试执行涉及链接服务器到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中转换数字时出现问题,但我仍然遇到同样的错误。
有关如何解决此问题的任何想法?感谢。
答案 0 :(得分:4)
对于我迄今为止所发现的内容,有一些事情可能会触发此错误。
去看看哪一个,我还没有找到解决方案,但也许这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