这边有2台服务器要链接oracle。    服务器A:32位操作系统,32位sql server
    服务器B:64位操作系统,64位sql server服务器A,用Microsoft provider ole db for ORACLE接口,建链接服务i,用openquery连接oracle没有问题。服务器B,因为是64位的,没有Microsoft ole db provider for oracle,于是装了64位的ODBC连接驱动Microsoft ole db provider for ODBC。
建了数据源经测试,连接没有问题。往oracle插入数据没有问题(查询没问题,如果不查询数字类型的列,也能查询成功),但查询提示:
-----------------------------------------------------
链接服务器"LINK_TIPTOP"的 OLE DB 访问接口 "MSDASQL" 返回了消息 "多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。"。
消息 7341,级别 16,状态 2,第 1 行
无法从链接服务器 "LINK_TIPTOP" 的 OLE DB 访问接口 "MSDASQL" 获取列 "[MSDASQL].TC_ITF04" 的当前行值。由于数据值溢出了提供程序所用数据类型的取值范围,转换失败。
-----------------------------------------------------oracle表结构如下:
TABLE_NAME COLUMN_NAME DATA_TYPE DATA_TYPE_MOD DATA_TYPE_OWNER DATA_LENGTH DATA_PRECISION DATA_SCALE NULLABLE COLUMN_ID DEFAULT_LENGTH DATA_DEFAULT NUM_DISTINCT LOW_VALUE HIGH_VALUE DENSITY NUM_NULLS NUM_BUCKETS LAST_ANALYZED SAMPLE_SIZE CHARACTER_SET_NAME CHAR_COL_DECL_LENGTH GLOBAL_STATS USER_STATS AVG_COL_LEN CHAR_LENGTH CHAR_USED V80_FMT_IMAGE DATA_UPGRADED HISTOGRAM
TC_ITF_FILE TC_ITF32 NUMBER NULL NULL 22 20 6 Y 34 NULL NULL 0 NULL NULL 0 0 0 2011-06-08 22:25:31.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE
TC_ITF_FILE TC_ITF33 NUMBER NULL NULL 22 20 6 Y 35 NULL NULL 0 NULL NULL 0 0 0 2011-06-08 22:25:31.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE
TC_ITF_FILE TC_ITF35 NUMBER NULL NULL 22 20 6 Y 36 NULL NULL 0 NULL NULL 0 0 0 2011-06-08 22:25:31.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE
TC_ITF_FILE TC_ITF36 NUMBER NULL NULL 22 20 6 Y 37 NULL NULL 0 NULL NULL 0 0 0 2011-06-08 22:25:31.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE
TC_ITF_FILE TC_ITF01 VARCHAR2 NULL NULL 50 NULL NULL N 1 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL CHAR_CS 50 YES NO 0 50 B NO YES NONE
TC_ITF_FILE TC_ITF011 NUMBER NULL NULL 22 5 0 Y 2 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE
TC_ITF_FILE TC_ITF02 DATE NULL NULL 7 NULL NULL Y 3 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE
TC_ITF_FILE TC_ITF03 VARCHAR2 NULL NULL 50 NULL NULL Y 4 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL CHAR_CS 50 YES NO 0 50 B NO YES NONE
TC_ITF_FILE TC_ITF04 NUMBER NULL NULL 22 5 0 Y 5 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE
TC_ITF_FILE TC_ITF05 VARCHAR2 NULL NULL 16 NULL NULL N 6 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL CHAR_CS 16 YES NO 0 16 B NO YES NONE
TC_ITF_FILE TC_ITF06 NUMBER NULL NULL 22 5 0 Y 7 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE
TC_ITF_FILE TC_ITF07 NUMBER NULL NULL 22 5 0 Y 8 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE
TC_ITF_FILE TC_ITF08 NUMBER NULL NULL 22 5 0 Y 9 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE
TC_ITF_FILE TC_ITF09 VARCHAR2 NULL NULL 50 NULL NULL N 10 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL CHAR_CS 50 YES NO 0 50 B NO YES NONE
TC_ITF_FILE TC_ITF10 VARCHAR2 NULL NULL 255 NULL NULL Y 11 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL CHAR_CS 255 YES NO 0 255 B NO YES NONE
TC_ITF_FILE TC_ITF11 VARCHAR2 NULL NULL 150 NULL NULL Y 12 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL CHAR_CS 150 YES NO 0 150 B NO YES NONE
TC_ITF_FILE TC_ITF12 VARCHAR2 NULL NULL 50 NULL NULL Y 13 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL CHAR_CS 50 YES NO 0 50 B NO YES NONE
TC_ITF_FILE TC_ITF13 VARCHAR2 NULL NULL 150 NULL NULL Y 14 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL CHAR_CS 150 YES NO 0 150 B NO YES NONE
TC_ITF_FILE TC_ITF14 NUMBER NULL NULL 22 18 6 Y 15 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE
TC_ITF_FILE TC_ITF15 DATE NULL NULL 7 NULL NULL Y 16 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE
TC_ITF_FILE TC_ITF16 DATE NULL NULL 7 NULL NULL Y 17 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE
TC_ITF_FILE TC_ITF17 VARCHAR2 NULL NULL 50 NULL NULL N 18 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL CHAR_CS 50 YES NO 0 50 B NO YES NONE
TC_ITF_FILE TC_ITF18 VARCHAR2 NULL NULL 150 NULL NULL Y 19 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL CHAR_CS 150 YES NO 0 150 B NO YES NONE
TC_ITF_FILE TC_ITF19 NUMBER NULL NULL 22 5 0 Y 20 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE
TC_ITF_FILE TC_ITF20 VARCHAR2 NULL NULL 50 NULL NULL Y 21 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL CHAR_CS 50 YES NO 0 50 B NO YES NONE
TC_ITF_FILE TC_ITF21 VARCHAR2 NULL NULL 50 NULL NULL Y 22 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL CHAR_CS 50 YES NO 0 50 B NO YES NONE
TC_ITF_FILE TC_ITF211 VARCHAR2 NULL NULL 50 NULL NULL Y 23 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL CHAR_CS 50 YES NO 0 50 B NO YES NONE
TC_ITF_FILE TC_ITF22 NUMBER NULL NULL 22 18 6 Y 24 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE
TC_ITF_FILE TC_ITF23 VARCHAR2 NULL NULL 50 NULL NULL Y 25 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL CHAR_CS 50 YES NO 0 50 B NO YES NONE
TC_ITF_FILE TC_ITF24 VARCHAR2 NULL NULL 50 NULL NULL Y 26 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL CHAR_CS 50 YES NO 0 50 B NO YES NONE
TC_ITF_FILE TC_ITF25 VARCHAR2 NULL NULL 150 NULL NULL Y 27 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL CHAR_CS 150 YES NO 0 150 B NO YES NONE
TC_ITF_FILE TC_ITF26 NUMBER NULL NULL 22 15 6 Y 28 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE
TC_ITF_FILE TC_ITF27 NUMBER NULL NULL 22 5 0 Y 29 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE
TC_ITF_FILE TC_ITF28 NUMBER NULL NULL 22 5 0 Y 30 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE
TC_ITF_FILE TC_ITF29 DATE NULL NULL 7 NULL NULL Y 31 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE
TC_ITF_FILE TC_ITF30 DATE NULL NULL 7 NULL NULL Y 32 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE
TC_ITF_FILE TC_ITF31 NUMBER NULL NULL 22 5 0 N 33 NULL NULL 0 NULL NULL 0 0 0 2010-11-15 22:07:16.000 NULL NULL NULL YES NO 0 0 NULL NO YES NONE百思不得其解,baidu、googleN多时间也没找到问题所在,求大神。

解决方案 »

  1.   

    自己顶一下,如果有类似SQL SERVER连接oracle有问题的同学也可以问题,我尽力回答。
      

  2.   

    -- 错误已经很明显,不是链接的问题,是字段数据类型溢出啦![MSDASQL].TC_ITF04" 的当前行值。由于数据值溢出了提供程序所用数据类型的取值范围,转换失败。
      

  3.   

    回2楼:
    但是另外一台服务器A(32位系统,microsoft ole db for oracle 驱动)建立的连接没有任何问题啊。
      

  4.   

    参考了http://topic.csdn.net/u/20080730/12/3bfa32d5-524a-4b3a-b783-d9493b1ee22c.html觉得有点道理。但还是不知道怎么解决
      

  5.   

    sql 32位 安装对应的32位oracle 客户端
    sql 64位 安装对应的64位oracle 客户端
    即可连接
      

  6.   

    联机没有问题。
    查询的时候出错。
    select tc_itf01,tc_itf011, tc_itf02, tc_itf03, tc_itf05
    , tc_itf10, tc_itf11, tc_itf12, tc_itf13
    , tc_itf15, tc_itf16, tc_itf17, tc_itf18, tc_itf21, tc_itf211
    , tc_itf20, tc_itf23, tc_itf24, tc_itf25,   tc_itf29
    , tc_itf30--, tc_itf32
    --delete 
    from  openquery(LINK_TIPTOP,'select tc_itf01,tc_itf011, tc_itf02, tc_itf03, tc_itf04, tc_itf05, tc_itf06
    , tc_itf07, tc_itf08, tc_itf09, tc_itf10, tc_itf11, tc_itf12, tc_itf13, tc_itf14
    , tc_itf15, tc_itf16, tc_itf17, tc_itf18, tc_itf19, tc_itf21, tc_itf211, tc_itf22
    , tc_itf20, tc_itf23, tc_itf24, tc_itf25, tc_itf26, tc_itf27, tc_itf28, tc_itf29
    , tc_itf30, tc_itf31, tc_itf32 from idcwd10.tc_itf_file')
    这个查询有问题
    下面这个查询没有问题(少了tc_itf011字段,这个是number类型的)
    select tc_itf01,tc_itf02, tc_itf03, tc_itf05
    , tc_itf10, tc_itf11, tc_itf12, tc_itf13
    , tc_itf15, tc_itf16, tc_itf17, tc_itf18, tc_itf21, tc_itf211
    , tc_itf20, tc_itf23, tc_itf24, tc_itf25,   tc_itf29
    , tc_itf30--, tc_itf32
    --delete 
    from  openquery(LINK_TIPTOP,'select tc_itf01,tc_itf011, tc_itf02, tc_itf03, tc_itf04, tc_itf05, tc_itf06
    , tc_itf07, tc_itf08, tc_itf09, tc_itf10, tc_itf11, tc_itf12, tc_itf13, tc_itf14
    , tc_itf15, tc_itf16, tc_itf17, tc_itf18, tc_itf19, tc_itf21, tc_itf211, tc_itf22
    , tc_itf20, tc_itf23, tc_itf24, tc_itf25, tc_itf26, tc_itf27, tc_itf28, tc_itf29
    , tc_itf30, tc_itf31, tc_itf32 from idcwd10.tc_itf_file')
      

  7.   

    谢谢各位,已经解决。select * from openquery(LINK,'select to_char(列名,'999') as 列名 from XXX.XXX')
    把那些number类型的字段强制转换一下(但不知道为什么。。)