本帖最后由 az8888311 于 2011-09-27 11:22:41 编辑

解决方案 »

  1.   

    的列 "NUM" (编译时序号为 1)在编译时有 129 的 "DBTYPE",但在运行时有 130你是不是修改数据库结构了?
      

  2.   

    http://blog.csdn.net/akuoma/article/details/5269496
      

  3.   

    "NUM"列出问题了吧?你可以尝试不选择num列再试试例如:select 不要num列的其他列 from ...如果没问题,就检查num列.
      

  4.   


    插入数据后运行SELECT  num, cls ,stat,src,vendor,wrh,psr,note,sumtotal,sumtax,rcvaddrFROM OPENQUERY(HD,'select * from HD4.AYY_ORDER')
    无论有没有查询列 "NUM" ,得到都是消息 7399,级别 16,状态 1,第 1 行
    链接服务器 "HD" 的 OLE DB 访问接口 "OraOLEDB.Oracle" 报错。提供程序报告了意外的灾难性错误。
    消息 7331,级别 16,状态 2,第 1 行
    无法释放来自链接服务器 "HD" 的 OLE DB 访问接口 "OraOLEDB.Oracle" 的行。
    消息 0,级别 20,状态 0,第 0 行
    A severe error occurred on the current command.  The results, if any, should be discarded.
    查询:
    select cls ,stat,src,vendor,wrh,psr,note,sumtotal,sumtax,rcvaddr from HD..HD4.AYY_ORDER得到的是:消息 7356,级别 16,状态 1,第 1 行
    链接服务器 "HDAPP" 的 OLE DB 访问接口 "OraOLEDB.Oracle" 为列提供的元数据不一致。
    对象 ""HD40"."AYY_ORDER"" 的列 "NUM" (编译时序号为 1)在编译时有 129 的 "DBTYPE",但在运行时有 130。
      

  5.   


    中间表还有其他的表也是使用varchar2(64)的但都没问题。就这表有问题,纠结啊
      

  6.   

    你何必如此纠结?
    --假设原来的表为TB
    create table tmp as select * from tb
    commit;
    如果没有数据,则插入
    insert into tmp select * from tmp
    commit;然后去对表tmp做测试,看是不是NUM列的问题.查对后,更改tb或者删除TB表,利用TMP生成tb
    drop table tb
    create table tb as select * from tmp
      

  7.   

    据我所知SQL Server没有varchar2数据类型,应该是在转换类型是出错了.试试将Oracle里的AYY_ORDER表的NUM字段修改为varchar(20)类型(或nvarchar(20)).
      

  8.   

    谢谢大家的热心帮忙,问题已经解决!原因是oracle中间表的一个字段长度过长,达到1024,换成255就成功了,在此谢谢各位的帮助,积分平分!