1

我最近刚刚从 SQL2005 32 位 --> 64 位移动了一个 SQL 数据库。我在使用 OraOLEDB.Oracle 提供程序连接到 Oracle 时遇到问题。

我能够安装 Oracle 10G 客户端,ODAC 64 位。我还能够将链接服务器添加到 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 ')

我明白了

你好

我的问题是,有没有人尝试从 SQL05 64bit 对 Oracle 运行 OPENQUERY ?有什么想法吗?为什么我只会返回列而不是数据?我在具有相同链接的另一台服务器上尝试了相同的查询并且它有效,它返回了行。

4

1 回答 1

1

因为你得到的行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'')')
于 2009-08-25T15:58:31.667 回答