将EXCEL文件利用INSERT INTO test 
SELECT * FROM OPENROWSET
('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;IMEX=0;
DATABASE=e:\demo.xls','SELECT * FROM [出货单$]')
后,发现<客户编号>的值为1.10106e+009之类的,我把EXCEL文件中的<客户编号>列的单元格格式设为文本后再导入,还是不行。
哪儿出错了?

解决方案 »

  1.   

    BULK INSERT (Transact-SQL)
    http://msdn.microsoft.com/zh-cn/library/ms188365.aspx
      

  2.   

    方式1: 在excel中在那一列把客户编号前加 一个单引号 '.
    方式2: 参考BULK INSERT 字符串到小数的类型转换
      

  3.   

    方式1: 在excel中在那一列把客户编号前加 一个单引号 '. 
    方式2: 参考BULK INSERT 字符串到小数的类型转换 
      

  4.   

    TO 楼上以及楼上的楼上:方式1: 在excel中在那一列把客户编号前加 一个单引号 '. 
    -----------------------------------------------
    不能改EXCEL原文件,因为实际文件有十几列,有很多字符型的。
    方式2: 参考BULK INSERT 字符串到小数的类型转换
    -----------------------------------------1、http://msdn.microsoft.com/zh-cn/library/ms188365.aspx这个链接直到现在都没打开,不好意思
    2、我的这种取数方法
    INSERT INTO test SELECT * FROM OPENROWSET ('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;IMEX=0; DATABASE=e:\demo.xls','SELECT * FROM [出货单$]') 与BULK还是不一样的啊,看了半天MSDN,也没搞明白。
    请楼上以及楼上的楼上再讲得更明白些好吗?谢谢!
      

  5.   

    TO:zjcxc邹老大,改了之后还是一样啊。
      

  6.   


    另外,按5楼<倒霉的孩子>的做法,加面加上一个单引号(经我测试,只需在第一行中加就可以了,不用全加),是可以解决问题。问题是:1、导入数据库后,该单引号是否还存在?
    2、是不是类似“1001”这样的字符在导入SQL时都要做加单引号的处理?-----------------------------------------
    请邹老大再看看,谢谢!
      

  7.   

    单引号是 Excel 里面把数字当文字处理的标识符, 导入后是不存在的一般来说, 只有纯数字的字符列(例如身份证号码, 楼主的单据编号)才需要加单引号的处理, 以保证导入时不会把其识别为数字, 从而导致一些不必要的麻烦
      

  8.   

    1,选中列,右击设置单格格式,分类里设置为文本.
    2,或者,在首行(列头)后加一行文本类型值,比如abc. 这样导入时会自动把值作文本处理,导入后再删除第一条记录。
      

  9.   

    除了改imex=1以外,我一般也是采用14楼的方法2,根据要导入的数据,按列给出相应类型,加一行,如是数字就给0,如是字符就给a,如是日期就给2008-08-08,以后结构类似的表,把这条粘过去就行了,没有必要导一行改一回第一行。此方法一在采用,主要是数值列容易当成字符(因为用了imex=1),需要用1去乘一下(在excel上操作)。
      

  10.   

    单引号是 Excel 里面把数字当文字处理的标识符, 导入后是不存在的 一般来说, 只有纯数字的字符列(例如身份证号码, 楼主的单据编号)才需要加单引号的处理, 以保证导入时不会把其识别为数字, 从而导致一些不必要的麻烦
    哈哈这样是对的 
    加 '会识别成字符
      

  11.   

    sql 语句查询时,相应字段加引号
      

  12.   

    在excel数字前加个',这样会出现一个绿色的小三角可以用这种方法将数字类型转换为文本类型再用openrowset()函数成功导入!