OPENQUERY на SQL Server 2005 64bit ведет себя странно - PullRequest
1 голос
/ 25 августа 2009

Я только что переместил SQL DB из SQL2005 32 бит -> 64 бит. У меня проблема с подключением к Oracle с помощью поставщика OraOLEDB.Oracle.

Мне удалось установить клиент Oracle 10G, 64-разрядный ODAC. Я также смог добавить связанный сервер к экземпляру Oracle. Я могу выполнить запрос, используя имя связанного сервера напрямую:

SELECT top 10 *
  FROM [DB0PBB0]..[DB0PBB0].[DM_CLICK] 

Пока это хорошо, однако проблема возникает, когда я пытаюсь использовать OPENQUERY. Я попробовал следующее:

select * from 
OPENQUERY(DB0PBB0,'select *  from DB0PBB0.DM_CLICK where Date_stamp <''24-Jul-09'' and Date_stamp >= ''23-Jul-09'' ')

SET FMTONLY OFF
select * from 
OPENQUERY(DB0PBB0,'select * from DB0PBB0.DM_CLICK where Date_stamp <''24-Jul-09'' and Date_stamp >= ''23-Jul-09'' ')

и я получаю только имена столбцов, без строк :(

если я запускаю этот скрипт:

SET FMTONLY OFF
select * from 
OPENQUERY(DB0PBB0,'select ''hello'' from dual ')

Я получаю

привет

У меня вопрос: кто-нибудь пробовал запускать OPENQUERY для Oracle с SQL05 64bit? Есть идеи, почему я получаю только столбцы вместо данных? Я пробовал тот же запрос на другом сервере с той же ссылкой, и он работал, он возвращал строки.

1 Ответ

1 голос
/ 25 августа 2009

, поскольку вы получаете строки с вероятностью SELECT * FROM DUAL, что это проблема запроса. Что касается вашего запроса, одна потенциальная ловушка заключается в том, что вы сравниваете то, что выглядит как столбец даты (DATE_STAMP), с VARCHAR.

Вы не должны полагаться на неявные преобразования для сравнения дат . Вместо этого вы должны использовать соответствующие явные функции, например:

select * from 
OPENQUERY(DB0PBB0,'select *  
                     from DB0PBB0.DM_CLICK 
                    where Date_stamp < to_date(''24-Jul-09'', ''dd-mon-rr'') 
                      and Date_stamp >= to_date(''23-Jul-09'', ''dd-mon-rr'')')
...