LZ做测试在详细一点!应该了解到具体是到哪一个字段出错了!
确实有可能是nvarchar的max长度或者是什么类型的问题哦!
如果你能继续还原错误就好了,试试在SqlServer中在新建一张跟contact结构一样的表,用于重现错误。
然后一个字段一个字段的查询(如果查询所有的时候有提示具体是那一列就不用这么干了),看看是哪个字段的问题。
如果是Description nvarchar(max) 那么就找一个Description内容最短的记录做条件查询看看是否继续报错!然后在找最长的。
在不报错的时候最好将查询的结果放到Oracle中的表里面。看看Oracle给你转换成了什么类型!---------------来源网络----------------
通过透明网关传送过来的字符类型列会被加大为3倍
譬如原来的字符列长度是 VARCHAR2(100)  
到了ORACLE中就会变为 VARCHAR2(300)
因此如果原来的字符串是2000 到了ORACLE中就变为了6000 超过了VARCHAR2类型的最大支持长度
原文地址:http://www.itpub.net/forum.php?mod=viewthread&tid=1713920
---------------------------------------

解决方案 »

  1.   


    可不能盲目相信呢,具体的得做测试!
     我这边的环境Oracle连接SqlServer是通过配置SqlServer的ODBC数据源来实现的!
    create table test_tbl as select * from SQLSERVERTABLE;过来的时候数据长度是没有变化的!
    具体的还得请LZ做个测试,给个结果看看才能知道!
      

  2.   

    不应该是nvarchar(max),如果是类型的话第3、4步操作不会行得通的。至于传过来的字符会加大3倍,这个我用create table as测试结果是原来nvarchar(m)的,过来全变成nvarchar2(m)。然后再建1张一样结构的表,把nvarchar2替换为varchar2,再insert .. select ...不会报错。
      

  3.   

    今天在测试服务器测,32位11gR2的环境,直接select *又可以了