none
Excel 导入/导出 到SQL server 数据类型问题 RRS feed

  • 问题

  • 刚才我将一个表里的数据导出到Excel里,当时在导出向导没选择 Excel的数据类型和大小。

    然后我在重新导入的时候就出错了。

    拿其中一列来说

    导入向导里 Excel源表该列 数据大小有时候显示VarChar(255)有时候是 LongText  但数据库该列大小为nvarchar(50)。所以导入的时候会出错

    这该如何解决。

    还有一点不明白的是,Excel里有这些数据类型吗?

    SQL server 是如何确定Excel里的数据类型的?

    数据库是SQL server2005

    2011年6月29日 5:39

答案

  • 使用向导(SSIS) 导入Excel 到 SQLServer 是一个非常非常麻烦的问题,尤其是设计到类型转换的时候。原因是 Excel 的 Jet 驱动有问题。

    最简单的方法是使用向导将Excel文件导入到一个新的表,要让向导自动的见表,然后再在SQL 端折腾这个表。

    2011年6月29日 11:41
    版主
  • Excel 默认看前八行来决定一列的类型的。如果前八行没有超过255的就是varchar(255),否则就是LongText。

    数据库列大小如果是50的话,有时会直接truncate不抱错,但是就丢数据了。有时是会报错。

    建议:1)改改数据行的顺序,让Excel能反映正确的列类型

    或者2)在第一行加一行假数据,导入到数据库后删掉。

     

    2011年6月30日 16:04
  • 没错。但是这个默认的8行是可以通过注册表的键来修改的(TypeGuessRows)。如果加一行假数据,来强制列的数据类型,则需要将注册表的这个默认的键值改为1才起作用,另外还要将连接到 Excel 文件的连接字符串加额外的开关。

     

    2011年6月30日 16:53
    版主

全部回复

  • 使用向导(SSIS) 导入Excel 到 SQLServer 是一个非常非常麻烦的问题,尤其是设计到类型转换的时候。原因是 Excel 的 Jet 驱动有问题。

    最简单的方法是使用向导将Excel文件导入到一个新的表,要让向导自动的见表,然后再在SQL 端折腾这个表。

    2011年6月29日 11:41
    版主
  • Excel 默认看前八行来决定一列的类型的。如果前八行没有超过255的就是varchar(255),否则就是LongText。

    数据库列大小如果是50的话,有时会直接truncate不抱错,但是就丢数据了。有时是会报错。

    建议:1)改改数据行的顺序,让Excel能反映正确的列类型

    或者2)在第一行加一行假数据,导入到数据库后删掉。

     

    2011年6月30日 16:04
  • 没错。但是这个默认的8行是可以通过注册表的键来修改的(TypeGuessRows)。如果加一行假数据,来强制列的数据类型,则需要将注册表的这个默认的键值改为1才起作用,另外还要将连接到 Excel 文件的连接字符串加额外的开关。

     

    2011年6月30日 16:53
    版主