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

  • 相关阅读:
    fedora上部署ASP.NET——(卡带式电脑跑.NET WEB服务器)
    SQL Server 请求失败或服务未及时响应。有关详细信息,请参见事件日志或其它适合的错误日志
    8086CPU的出栈(pop)和入栈(push) 都是以字为单位进行的
    FTP 服务搭建后不能访问问题解决
    指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
    Linux 安装MongoDB 并设置防火墙,使用远程客户端访问
    svn Please execute the 'Cleanup' command. 问题解决
    .net 操作MongoDB 基础
    oracle 使用绑定变量极大的提升性能
    尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。
  • 原文地址:https://www.cnblogs.com/systemkk/p/4186166.html
Copyright © 2011-2022 走看看