用SSIS导入导出工具从oracle导入数据的时候,发现NUMBER(16,2)型的字段sqlserver无法处理,指定为float、decimal、numeric甚至nvarchar等类型,均报出:
错误 0xc0204018: DTS.Pipeline: “输出列“AVGCOST”(41)”的精度无效。此精度必须介于 1 和 38 之间。
哪位知道此类数据导入时该如何处理?

解决方案 »

  1.   

    咦?
    decimal不可以么?
    decimal(16,2)不行啊?
      

  2.   

    在MSSQL中没有NUMBER这个类型
    你直接用decimal就可以了。。
      

  3.   

    不行的,他认为oracle那个字段输出列“AVGCOST”(41)”,太大了。可事实上没有那么大啊
      

  4.   

    double你试一下,我记得以前我们做数据对应用的是double
      

  5.   


    -- 用number()类型,需要注意的是number()类型的最大宽度是38,你将41修改为38试试!
      

  6.   

    -- 12.1 Oracle 数据类型概述
    -- Oracle 提供了22种不同的SQL数据类型供我们使用。简要地讲,这些数据类型如下:
    -- *(01) CHAR:这是一个定长字符串,会用空格填充来达到最大长度。非null的CHAR(10)总是包含10字节信息(使用了默认国家语言支持(National Language Support, NLS)设置)。
    --      稍后将更详细地介绍NLS的作用。CHAR字段最多可以存储2000字节的信息。
    -- *(02) NCHAR:这昌一个包含UNICODE格式的定长字符串。Unicode是一种字符编码标准,由Unicode联盟(Unicode Consortium)开发,其目的是为所有语言提供 一种对字符进行编码的通用方法,
    --     而不论使用是的何种计算机系统或平台。有了NCHAR类型,就允许数据库中包含采用两种不同字符集的数据:使用数据库字符集的CHAR类型和使用国家字符集的NCHAR类型。
    --     非null的NCHAR(10)总是包含10个字符的信息(注意,在这方面,它与CHAR类型有所不同)。NCHAR字段最多可以存储2000字节的信息。
    -- *(03) VARCHAR2:目前也是VARCHAR的同义词。这是一个变长字符串,与CHAR类型不同,它不会用空格填充至最大长度。VARCHAR2(10)可能包含0~10字节的信息(使用默认NLS设置)。
    --     VARCHAR2最多可以存储4000字节的信息。
    -- *(04) NVARCHAR2:这是一个包含UNICODE格式数据的变长字符串。NVARCHAR2(10)可以包含0~10字符的信息。NVARCHAR2最多可以存储4000字节的信息。
    -- *(05) RAW:这是一种变长二进制数据类型,这说明采用这种数据类型存储的数据 不会发生字符集转换。可以把它看作由数据库存储的信息的二进制字节串。
    --     这种类型最多可以存储2000字节的信息。
    -- *(06) NUMBER:这种数据类型能存储精度最多达38位的数字。这些数介于1.0x10(-130)~(但不包括)1.0x10(126)之间。每个数字存储在一个变长字段中,
    --     其长度在0(尾部的NULL列就是0字节)~22字节之间。Oracle的NUMBER类型精度很高,远远高于许多编程语言中常规的FLOAT和DOUBLE类型。
    -- *(07) BINARY_FLOAT:这是Oracle 10g Release 1及以后版本中才有的一种新类型。它是一个32位单精度浮点数,可以支持至少6位精度,占用磁盘上5字节的存储空间。
    -- *(08) BINARY_DOUBLE:这是一种Oracle 10g Release 1及以后版本中才有的新类型。它是一个64位双精度浮点数,可以支持至少13位精度,占用磁盘上9字节的存储空间。
    -- *(09) LONG:这种类型能存储最多2GB的字符数据(2GB是指2千兆字节,而不是2千兆字符,因为在一个多字节字符集中,每个字符可能有多个字节)。由于LONG类型有诸多限制(后面会讨论),
    --     而且提供LONG类型只是为了保证向后兼容性,所以强烈建议新应用中不要使用LONG类型,而且在现有的应用中也要尽可能将LONG类型转换为CLOB类型。
    -- *(10) LONG RAW:LONG RAW类型能存储多达2GB的二进制信息。由于LONG同样的原因,建议在将来的所有开发中都使用BLOB类型,另外现有的应用中也应尽可能将LONG RAW转换为BLOB类型。
    -- *(11) DATE:这是一个7字节的定宽日期/时间数据类型。其中总包含7个属性,包括:世纪、世纪中哪一年、月份、月中的哪一天、小时、分钟和秒。
    -- *(12) TIMESTAMP:这是一个7字节或11字节的定宽日期/时间数据类型。它与DATE数据类型不同,因为TIMESTAMP可以包含小数秒(fractional second);
    --     带小数秒的TIMESTAMP在小数点右边最多可以保留9位。
    -- *(13) TIMESTAMP WITH TIME ZONE:与前一种类型类似,这是一个13字节的定宽TIMESTAMP,不过它还提供了时区(TIME ZONE)支持。数据中会随TIMESTAMP存储关于时区的额外信息,
    --     所以原先插入的TIME ZONE会与数据一同保留。
    -- *(14) TIMESTAMP WITH LOCAL TIME ZONE:与TIMESTAMP类似,这是一种7字节或11字节的定宽日期/时间数据类型;不过,这种类型对时区敏感(time zone sensitive)。如果在数据库中有修改,
    --     会参考数据中提供的TIME ZONE,根据数据库时区对数据库中的日期/时间部分进行“规范化”。所以,如果你想使用U.S./Pacific时区插入一个日期/时间,而数据库时区为U.S/Eastern,
    --     最后的日期/时间信息会转换为Eastern时区的日期/时间,并像TIMESTAMP一样存储。获取这个数据时,数据库中存储的TIMESTAMP将转换为会话时区的时间。
    -- *(15) INTERVAL YEAR TO MONTH:这是一个5字节的定宽数据类型,用于存储一个时段,这个类型将时段存储为年数和月数。
    --     可以在日期运算中使用这种时间间隔使一个DATE或TIMESTAMP类型增加或减少一段时间。
    -- *(16) INTERVAL DAY TO SECOND:这是一个11字节的定宽数据类型,用于存储一个时段,这个类型将时段存储为天/小时/分钟/秒数,还可以有最多9位的小数秒。
    -- *(17) BFILE:这种数据类型允许在数据库列中存储一个Oracle目录对象(操作系统目录的一个指针)和一个文件名,并读取这个文件。
    --     这实际上允许你以一种只读的方式访问数据库服务器上可用的操作系统文件,就好像它们存储在数据库表本身中一样。
    -- *(18) BLOB:在Oracle 9i及以前的版本中,这种数据类型允许存储最多4GB的数据,在Oracle 10g及以后的版本中允许存储最多(4 GB)x(数据库块大小)字节的数据。
    --     BLOB包含不需要进行字符集转换的“二进制”数据,如果要存储电子表格、字处理文档、图像文件等就很适合采用这种数据类型。
    -- *(19) CLOB:在Oracle 9i及以前的版本中,这种数据类型允许存储最多4GB的数据,在Oracle 10g及以后的版本中允许存储最多(4 GB)x(数据库块大小)字节的数据。
    --     CLOB包含要进行字符集转换的信息。这种数据类型很适合存储纯文本信息。
    -- *(20) NCLOB:在Oracle 9i及以前的版本中,这种数据类型允许存储最多4GB的数据,在Oracle 10g及以后的版本中允许存储最多(4 GB)x(数据库块大小)字节的数据。
    --     NCLOB存储用数据库国家字符集编码的信息,而且像CLOB一样,这些信息要进行字符集转换。
    -- *(21) ROWID:ROWID实际上是数据库中一行的10字节地址。ROWID中编码有足够的信息,足以在磁盘上定位这一行,以及标识ROWID指向的对象(表等)。
    -- *(22) UROWID:UROWID是一个通用ROWID,用于表(如IOT和通过异构数据库网关访问的没有固定ROWID的表)。UROWID是行主键值的一种表示,因此,取决于所指向的对象,
    --     UROWID的大小会有所变化。