【问题标题】:OPENQUERY on SQL Server 2005 64bit behaves weirdSQL Server 2005 64 位中的 OPENQUERY 行为怪异
【发布时间】:2009-08-25 15:37:21
【问题描述】:

我最近刚刚从 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 ?有什么想法吗?为什么我只会返回列而不是数据?我在具有相同链接的另一台服务器上尝试了相同的查询,它有效,它返回了行。

【问题讨论】:

    标签: sql-server-2005 oracle 64-bit openquery


    【解决方案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'')')
    

    【讨论】:

    • 非常感谢。由于您的回答,我能够使用 OLEDB 驱动程序而不是 OLEDB-ODBC Wrapper
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 2015-12-30
    • 2010-09-18
    相关资源
    最近更新 更多