zoukankan      html  css  js  c++  java
  • sql2008读取excel

    环境:win7(64位)+sql2008

    sql语句:

       --启用Ad Hoc Distributed Queries:
    exec sp_configure 'show advanced options',1
    reconfigure
    exec sp_configure 'Ad Hoc Distributed Queries',1
    reconfigure
        --使用完成后,关闭Ad Hoc Distributed Queries:
    exec sp_configure 'Ad Hoc Distributed Queries',0
    reconfigure
    exec sp_configure 'show advanced options',0
    reconfigure 
    
    --允许在进程中使用ACE.OLEDB.12
    EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
    --允许动态参数
    EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
         
    --读取excel方式1
    select * from OpenRowSet
             ('Microsoft.ACE.OLEDB.12.0',
              'Excel 8.0;HDR=Yes;IMEX=1;Database=c:data.xls',
               [Sheet1$]
              )
    --读取excel方式2
     SELECT * FROM OpenDataSource( 'Microsoft.ACE.OLEDB.12.0','Data Source=c:/data.xls;Extended properties=Excel 8.0')...Sheet1$  
    View Code

    读取excel列名称

     1 ----普通表测试
     2 --if(OBJECT_ID('test@') is not null)
     3 --drop table test@
     4 --SELECT * 
     5 --into test@
     6 --FROM OpenDataSource( 'Microsoft.ACE.OLEDB.12.0','Data Source=c:data.xls;Extended properties=Excel 8.0')...Sheet1$  
     7 ----select * from test@  
     8 ----打印excel表列名称
     9 --declare @list nvarchar(max),@sql nvarchar(max) 
    10 --set @list=''
    11 --set @sql=''
    12 --select @list=@list+'['+rtrim(b.name)+'],' from sysobjects a,syscolumns b where a.id=b.id and a.name='test@'
    13 ----print('@list:'+@list)  
    14 --set @sql='select '+left(@list,len(@list)-1)+' from test@' 
    15 --print(@sql)
    16 
    17 --临时表测试 
    18 if(OBJECT_ID('tempdb..#temp') is not null)
    19 drop table #temp
    20 SELECT * 
    21 into #temp
    22 FROM OpenDataSource( 'Microsoft.ACE.OLEDB.12.0','Data Source=c:data.xls;Extended properties=Excel 8.0')...Sheet1$  
    23 --select * from #temp  
    24 --打印excel表列名称
    25 declare @list nvarchar(max),@sql nvarchar(max) 
    26 set @list=''
    27 set @sql='' 
    28 select @list=@list+'['+rtrim(b.name)+'],' from tempdb.sys.columns b where object_id = object_id('tempdb..#temp')
    29 --print('@list:'+@list)  
    30 set @sql='select '+left(@list,len(@list)-1)+' from #temp' 
    31 print(@sql)
    View Code

    常用sql:

    --临时表测试 
    if(OBJECT_ID('tempdb..#temp') is not null)
    drop table #temp
    SELECT * 
    into #temp
    FROM OpenDataSource( 'Microsoft.ACE.OLEDB.12.0','Data Source=c:1.xls;Extended properties=Excel 8.0')...Sheet1$   
    --select * from #temp  
    --select distinct AMS ,PAR from #temp  
    --打印excel表列名称
    declare @list nvarchar(max),@sql nvarchar(max),@list1 nvarchar(max),@sql1 nvarchar(max)  
    ,@listC nvarchar(max)
    set @list=''
    set @sql='' 
    set @sql1=''
    set @list1=''
    set @listC=''
    
    select @list=@list+'['+rtrim(b.name)+'],'
    --select *  
    from tempdb.sys.columns b 
    where object_id = object_id('tempdb..#temp')
    ----C#赋值
    select @listC=@listC+'rowNew["'+rtrim(b.name)+'"]'+'= rowstmp[i]["'+rtrim(b.name)+'"];'
    --select *  
    from tempdb.sys.columns b 
    where object_id = object_id('tempdb..#temp')
    ----C#后台页面sql
    select @list1=@list1+' '''''''' + convert(nvarchar,ISNULL(t.['+rtrim(b.name)+'],'''')) + '''''''' +'' as '+'['+rtrim(b.name)+'] ,'' +'
    --select *  
    from tempdb.sys.columns b 
    --cross join (select top 1 * from #temp) t
    where object_id = object_id('tempdb..#temp')
    
    --print('@list:'+@list)  
    set @sql='select '+left(@list,len(@list)-1)+' from #temp' 
    print(@sql)
    
    --第一行数据作为组建的sql的值
    set @sql1='select '+left(@list1,len(@list1)-1)+' from (select top 1 * from #temp) t ' 
    print(@sql1)
    exec(@sql1)
    
    print(@listC)
    View Code

    --去除,  stuff

    select r.phone,[costnum]=COUNT(1) , [ordernos] = stuff((select ',' + [t].[orderno] from t_red t where r.phone = t.phone for xml path('')) , 1 , 1 , '')  
    from t_red r
    group by r.phone  
    View Code

    提示:

    OLE DB 访问接口 'Microsoft.Jet.OLEDB.4.0' 配置为在单线程单元模式下运行,所以该访问接口无法用于分布式查询  报错原因:在64SQL Engine中已经不提供jet.oledb.4.0的驱动了

    解决:下载一个ACE.Oledb.12.0 for X64位的驱动,并把连接字符串Microsoft.jet.Oledb.4.0 更改为 Microsoft.ACE.OLEDB.12.0

    从微软的主页下载,会发现有两个版本,一个是位32位系统准备的,另一个是为64位系统准备的。因为我们是Win7 64位系统,而且项目用到的dll都是64位的,所以要装Microsoft Access Engine-x64,但是安装的时候会检测到你机器上安装的是32位的Office,要求你把Office升级到64位, 直接安装它要求提示删除,

    1,删除32位Microsoft Access Engine.exe(控制面板,添加删除程序) 
    2,使用"/passive"命令来安装,例如"C:directory pathAccessDatabaseEngine_x64.exe" /passive
    3,安装完成后,查看注册表HKEY_LOCAL_MACHINESOFTWAREMicrosoftOffice14.0CommonFilesPaths,删除mso.dll

  • 相关阅读:
    Pyhont 高阶函数
    Python 函数式编程
    Python 递归函数
    Python 函数的参数定义
    Lniux学习-AWK使用
    Windows10 下 VirtualBox6 中 Centos8 无法安装"增强功能"
    Linux学习-Shell-系统启动过程与执行方式
    接口测试-工具介绍
    Linux学习-Sed 命令
    Linux学习-命令行参数、函数
  • 原文地址:https://www.cnblogs.com/systemkk/p/4186166.html
Copyright © 2011-2022 走看看