Не удалось получить данные строки от поставщика OLE DB «ProviderName» для связанного сервера «LinkedServerName» - PullRequest
1 голос
/ 24 января 2011

Я сталкиваюсь с этой проблемой, когда пытаюсь выполнить этот запрос, связанный со связанным сервером с 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 ]

4 голосов
/ 08 декабря 2011

Для того, что я нашел до сих пор, есть несколько вещей, которые могут вызвать эту ошибку.

  • Больше, чем 100 результатов.Некоторые люди используют свои запросы при добавлении «топ-100» в качестве максимального результата.
  • Некоторые утверждают, что вы должны использовать openquery () с полным путем к таблице (включая сервер), чтобы выполнить запрос ксвязанная база данных.
  • Другие говорят, что передаваемый формат даты несовместим.

Пойди, какой, я пока не нашел решения, но, возможно, один изэти 3 помогут вам.

2 голосов
/ 30 августа 2012

Была эта проблема в представлении, содержащем объединение между таблицей sqlserver и представлением, содержащим openquery в Oracle.

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

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

Присоединиться к двум полям 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)
1 голос
/ 01 декабря 2017

У нас была похожая ошибка.

Невозможно получить данные строки от поставщика OLE DB «OraOLEDB.Oracle» для связанного сервера «LINKEDSERVER». [SQLSTATE 42000] (Ошибка 7346) Поставщик OLE DB "OraOLEDB.Oracle" для связанного сервера «LINKEDSERVER» вернул сообщение «ORA-01403: данные не найдены»

и получается, что сопоставимость базы данных SQL Server была изменена с 2008 по 2014 год. Это привело к повреждению некоторых индексов. Мы откатили изменения и повторили запросы без проблем.

Поскольку режим совместимости 2014 года был для нас важен, мы снова изменили его на 2014, перестроили индексы, и это, казалось, устранило проблемы. Надеюсь, это поможет кому-то еще там в w.w.w.

1 голос
/ 01 февраля 2011

Во-первых, вам нужно задать псевдонимы столбцов для этих столбцов.

Что происходит, когда вы делаете SELECT DISTINCT 'abc' ABC ...?

0 голосов
/ 22 марта 2016

Изменение

... 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
...