用OPENROWSET把Excel导入数据表中时,数据出现了错误,我们导入时那一列有数值型的和字符型的,如果数值型的数据大于字符型的数据,导入到库中时字符弄数据就是NULL,反之,数值型数据就为空,是怎么回事?

解决方案 »

  1.   

    確認下你的格式是否有誤,必要時設定其數據格式等。。eg:
    一、如我在D盘下有D:\物件编码.xls文件,有工作表名Sheet是中文命名为‘办公用品编码’,‘零件编码’。       select * into #temp  from opendatasource('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=D:\物件编码.xls')...[办公用品编码$]       select * into #temp  from opendatasource('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=D:\物件编码.xls')...[零件编码$]二、如你的Excel文件是工作表是默认的Sheet命名为Sheet1,Sheet2等。 select * into #temp  from opendatasource('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=D:\物件编码.xls')...[Sheet1$]      select * into #temp  from opendatasource('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=D:\物件编码.xls')...[Sheet2$]
    三、引用 Limpire (昨夜小楼)以下方法,也行      OpenRowSet和OpenDataSource都能用读取用数字命名的Sheet,只不过要加单引号界定,其它不规则命名的Sheet也一样。 假设C:\Text.xls有个Sheet名字是“3”: 
           select * from opendatasource('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=C:\Test.xls')...['3$']
    --OR
    select * from openrowset('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=C:\Test.xls',['3$'])
    --OR
    select * from openrowset('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=C:\Test.xls','select * from [''3$'']')
    --OpenRowSet(,,'query')可以不加单引号界定:
    select * from openrowset('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=C:\Test.xls','select * from [3$]')
    四、本人的方法:导出EXCEL时,对应字段数类型都要相同,EXCEL字段的名称stano,sname 和数据库的要一样,才能导出成功。反之一樣:insert into openrowset('MICROSOFT.JET.OLEDB.4.0','excel 8.0;
    HDR=YES;database=D:\FName.xls',sheet1$)
     select stano,sname from stainfo 
      

  2.   

    楼上估计没有明白楼主的意思,
    SELECT
    *
    FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="d:\更新文件\11.xls";User ID=Admin;Password=;Extended properties=''Excel 5.0;HDR=yes;IMEX=1''')...sheet1$加上 IMEX=1表示转为文本型。这样都可以导入。还一个办法就是,excel是根据这列的前八项来确定数据类型的,你只要把八行字符型的数据放在最前面就可以了。
      

  3.   

    那个  通过前八行判断类型  的说法  属实?  我也想知道,以前遇到过类型的问题,直接sql inport excel 也有过