zoukankan      html  css  js  c++  java
  • bcp生成excel文件优化方案

    一、综述:
    目前页面生成excel的方法很多,总结起来,不外乎两类,一种是使用excel对象,一种是“伪文件”。两种方法

    是各自有各自的优缺点,在不同的领域也都有很多成功的案例。前者使用对象的方式很灵活,可以生成任意表现

    方式的excel文件,缺点也很明显,比如在asp下,使用excel如果发生异常,excel对象的资源是不会释放的,也

    就是说在特殊情况下会把服务器“拖死”。后者的方式一般使用的是html文件,但是后缀是xls,也就是“伪文件

    ”,这样的操作在生成excel文件的时候,对比第一种方法系统开销比较小,但是由于是“伪文件”,在打开文件

    的时候会有提示,但是由于生成html的方法很多,也是目前在我们系统中采用比较多的方式,另外他生成复杂样

    式的时候也比较方便,可以采用tr td的方式加上style.

    二、方案说明
    下面我要说的这种方式,是目前能找到的最快的生成excel文件的方式,姑且叫做“bcp生成csv”方法吧。它有

    以下几个适用的范围。需要说明我的这篇文章不是要生成完美的excel文件,是要解决大数据量下快速生成excel文件的问题,我发现很多园子的朋友都误解了,特此说明
    1.生成的excel格式比较单一,没有合并列等情况
    2.生成的文件格式为csv,但是可以用excel默认打开
    3.执行的存储过程用户需要xp_cmdshell权限

    接下来,说说它的好处:
    1.生成效率很高,由于是并发操作,每1000条数据传送一次
    2.生成的文件没有冗余代码,全部为数据信息,保证了文件是所有类型中最小的
    3.没有office2003中的excel的单sheet的6万多行的限制,就算输出10万条数据也能正常生成,但是用excel2003

    打开失败,用excel2007打开正常

    但是由于使用上的不方便,我就写了一个存储过程,只需要传递几个参数进去,就能自动生成对应的excel文件

    。先贴上代码:


    三、代码

    Code

    四、代码说明
       1.@sql1:传入sql语句中的from的前面的语句
       2.@sql2:传入sql语句中的from的后面的语句,包括from
       3.@columneName:传入显示的列标题,用英文的逗号分割
       4.例子:
    /*测试
    [proc_2csv] 'select top 1000 userid,cardname,cardid,studentname,case sex when ''1'' then ''男''

    else ''女'' end sex','from registersys','用户名,证件类型,证件号码,姓名,性别'
    */

    五、补充说明:
       1.如果传入的sql语句中有单引号,在传入之前替换成两个单引号
       2.如果传入的sql语句有英文的逗号,替换成全角的逗号
       3.注意master..xp_cmdshell代码中的172.16.4.*替换成你机器ip,后面替换成对应的帐户和密码,注意这个

    帐户必须有xp_cmdshell的权限

    六、引申:
      很多人会说用sa不安全,用xp_cmdshell不安全,确实是这样,但是我们可以采用临时授予当前用户执行系统

    扩展存储过程权限,这个方面我也正在学习,如果大家有这方面的想法可以一起探讨。
      以下是我找到的一些资源:
       1.如何在不提升用户权限的情况下,使普通用户执行xp_cmdshell存储过程
       http://blog.csdn.net/puddingpudding/archive/2008/12/04/3445833.aspx
       2.重新设置代理和 SQLAgentCmdExec 帐户
       http://support.microsoft.com/kb/264155/zh-cn

  • 相关阅读:
    百度搜索API v3版本与soap
    Yii整合ZF2及soap实例
    Getting started writing ZF2 modules
    js写出php中的函数系列
    一些有用的命令
    a标签至于flash之上的时候,IE浏览器无法点击连接的问题
    js问题集锦
    php常用函数集锦[备份用的]
    用过的一些js函数[备份用的]
    ELK
  • 原文地址:https://www.cnblogs.com/tippoint/p/1365396.html
Copyright © 2011-2022 走看看