dddddddddddddddddddddddddddddddddddddddddhelp

解决方案 »

  1.   

    先将数据类型转换,再后再将数据导入。/*******  导出到excel
    EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""'/***********  导入Excel
    SELECT * 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
      'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
      

  2.   

    /*******  导出到excel
    EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""'/***********  导入Excel
    SELECT * 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
      'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions/*动态文件名
    declare @fn varchar(20),@s varchar(1000)
    set @fn = 'c:\test.xls'
    set @s ='''Microsoft.Jet.OLEDB.4.0'',
    ''Data Source="'+@fn+'";User ID=Admin;Password=;Extended properties=Excel 5.0'''
    set @s = 'SELECT * FROM OpenDataSource ('+@s+')...sheet1$'
    exec(@s)
    */SELECT cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+' ' 转换后的别名
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
      'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions/********************** EXCEL导到远程SQL
    insert OPENDATASOURCE(
             'SQLOLEDB',
             'Data Source=远程ip;User ID=sa;Password=密码'
             ).库名.dbo.表名 (列名1,列名2)
    SELECT 列名1,列名2
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
      'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
      

  3.   

    select * from 
    OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
    ,'Excel 8.0;IMEX=1;HDR=YES;DATABASE=c:\test.xls' --c:\test.xls是excel文件名
    ,sheet1$) --sheet1$是工作表名+$
      

  4.   

    用上述sql处理就行了,注意excel文件必须在sql服务器上
      

  5.   

    还是不成阿。。我现在就是一个问题没解决: excel表中有一列,列名是学时,这里面存的数据有数字(比如1,20)  还有带文字的(比如1周,20周),asp上显示出来的时候 “周”显示不出来,郁闷疯了阿,大家帮忙阿
      

  6.   

    就是数据类型不对应的问题,手工把excel表的那一列改成字符型的,就都出来了
    但是我这个excel表是用软件生成的,所以格式都是固定的,有没有什么编程办法实现excel列的类型转换功能呢???或者是一个插件也可以,谢谢了
      

  7.   

    --这个是肯定可以的,除非你删除了其中的IMEX=1;这个选项,HDR=YES表示第一行是字段名,如果第一行是记录,改为HDR=NOselect * from 
    OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
    ,'Excel 8.0;IMEX=1;HDR=YES;DATABASE=c:\test.xls' --c:\test.xls是excel文件名
    ,sheet1$) --sheet1$是工作表名+$
      

  8.   

    但我不是什么都取不出来的问题阿
    我的其他都能正常显示,就是一列因为excel的数据类型不匹配出现 文字无法存到sql里,只要能解决如何把类型强制转换成统一的,问题就解决了阿
      

  9.   

    具体如何操作啊,我想转换excel里b1一直到b5的数据类型 ,我不明白如何做呜呜
      

  10.   

    --类似这样insert 正式表(b1,b2,...,b5,其他字段)
    select b1=case when isnumeric(b1) then b1 else 0 end  --如果是数字型,则导入,否则用0代替
          ,b2=case when isnumeric(b2) then b2 else 0 end
          ...
          ,b5=case when isnumeric(b4) then b2 else 0 end
          ,其他字段
    from 
    OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
    ,'Excel 8.0;IMEX=1;HDR=YES;DATABASE=c:\test.xls'--c:\test.xls是excel文件名
    ,sheet1$) --sheet1$是工作表名+$
      

  11.   

    楼上大哥谢谢了啊:)但是就像魔术师说的,如果我要把2周存到sql表里,那按你的意思,周字成0了,我可以写 else 周?我比较菜不好意思,我就是中文进不去sql表,郁闷啊。还有就是数据太多的话如果这么判断着进sql表,会不会很慢啊?
      

  12.   

    to zjcxc(邹建) 用 IMEX=1 混合 可以,问题解决了,谢谢!