OPENQUERY no SQL Server 2005 64 bit comporta estranho
-
19-09-2019 - |
Pergunta
Eu só recentemente se mudou um SQL DB a partir SQL2005 de 32 bits -> 64 bit. Estou tendo um problema de conexão à Oracle usando o provedor OraOLEDB.Oracle.
Eu era capaz de instalar o Oracle 10G cliente, ODAC 64 bit. Eu também era capaz de adicionar um servidor ligado à instância Oracle. Eu sou capaz de executar uma consulta usando o nome do servidor vinculado diretamente:
SELECT top 10 *
FROM [DB0PBB0]..[DB0PBB0].[DM_CLICK]
Até agora é bom, no entanto, o problema ocorre quando tento usar OPENQUERY. Eu tentei o seguinte:
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'' ')
e eu obter apenas os nomes das colunas, nenhuma linha :(
Se eu executar este script:
SET FMTONLY OFF
select * from
OPENQUERY(DB0PBB0,'select ''hello'' from dual ')
I get
Olá
A minha pergunta é, alguém tentou correr OPENQUERY contra a Oracle a partir de um 64bit SQL05? Qualquer? Idea por que eu iria obter apenas as colunas de volta em vez de dados? Eu tentei a mesma consulta em outro servidor com o mesmo link e ele trabalhou, ele retornou linhas.
Solução
desde que você está recebendo linhas com as chances SELECT * FROM DUAL
são de que ele é uma questão de consulta. Quanto à sua consulta uma armadilha potencial é que você está comparando o que parece ser uma coluna de data (DATE_STAMP
) com um VARCHAR.
Você não deve confiar em conversões implícitas para comparar datas . Em vez disso, você deve utilizar as funções explícitas apropriadas, por exemple:
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'')')