热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQLServer2000把指定查询输出为Excel文件的存储

  SET  QUOTED_IDENTIFIER 


 




SET


 QUOTED_IDENTIFIER 


ON


 





GO







SET


 ANSI_NULLS 


ON


 





GO
















ALTER


   


proc


 stp_ExportTable



    


@sqlstr


 


nvarchar


(


4000


),        


--


查询语句,如果查询语句中使用了order by ,请加上top 100 percent,注意,如果导出表/视图,用上面的存储过程







    


@orderstr


 


nvarchar


(


255


),    


--


Order by Field







    


@path


 


nvarchar


(


1000


),       


--


文件存放目录







    


@fname


 


nvarchar


(


250


),       


--


文件名







    


@sheetname


 


varchar


(


250


)


=


''


      


--


要创建的工作表名,默认为文件名







as


 



    


declare


 


@err


 


int


,


@src


 


nvarchar


(


255


),


@desc


 


nvarchar


(


255


),


@out


 


int





    


declare


 


@obj


 


int


,


@constr


 


nvarchar


(


1000


),


@sql


 


varchar


(


4000


),


@fdlist


 


varchar


(


8000


)



    


declare


 


@IstmpTB


 


as


 


bit





    


declare


 


@tmpsql


  


as


 


varchar


(


4000


)









    


SET


 


@IstmpTB


=


0





    


--


参数检测







    


if


 


isnull


(


@fname


,


''


)


=


''


 


set


 


@fname


=


'


temp.xls


'





    


if


 


isnull


(


@sheetname


,


''


)


=


''


 


set


 


@sheetname


=


replace


(


@fname


,


'


.


'


,


'


#


'


)



    



    


--


检查文件是否已经存在







    


if


 


right


(


@path


,


1


)


<>


'




'


 


set


 


@path


=


@path


+


'




'





    


create


 


table


 #tb(a 


bit


,b 


bit


,c 


bit


)



    


set


 


@sql


=


@path


+


@fname








    


--


数据库创建语句







    


Insert


 


into


 #tb 


exec


 master..xp_fileexist 


@sql





    


set


 


@sql


=


@path


+


@fname





    



    


if


 


exists


(


select


 


1


 


from


 #tb 


where


 a


=


1


)



     


set


 


@constr


=


'


DRIVER={Microsoft Excel Driver (*.xls)};DSN=


''''


;READOnLY=FALSE


'





           


+


'


;CREATE_DB="


'


+


@sql


+


'


";DBQ=


'


+


@sql





    


else





     


set


 


@constr


=


'


Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.0;HDR=YES


'





        


+


'


;DATABASE=


'


+


@sql


+


'


"


'














    


--


连接数据库







    


--


print 'nn33'







    


exec


 


@err


=


sp_oacreate 


'


adodb.connection


'


,


@obj


 out



    


if


 


@err


<>


0


 


goto


 lberr



    


--


print 'nn44'







    


exec


 


@err


=


sp_oamethod 


@obj


,


'


open


'


,


null


,


@constr





    


if


 


@err


<>


0


 


goto


 lberr






    


--


构造temp表的SQL







    


declare


 


@tbname


 sysname



    


set


 


@tbname


=


'


##tmp_


'


+


convert


(


varchar


(


38


),


newid


())



    


set


 


@sql


=


'


select * into [


'


+


@tbname


+


'


] from(


'


+


@sqlstr


+


'


) a


'





    


--


print @sql







    


exec


(


@sql


)



    


set


 


@IstmpTB


=


1





    



    


select


 


@sql


=


''


,


@fdlist


=


''





    


select


 


@fdlist


=


@fdlist


+


'


,[


'


+


a.name


+


'





'





     ,


@sql


=


@sql


+


'


,[


'


+


a.name


+


'





'





      


+


case


 


when


 b.name 


in


(


'


char


'


,


'


nchar


'


,


'


varchar


'


,


'


nvarchar


'





then





         


'


text(


'


+


cast


(


case


 


when


 a.length


>


255


 


then


 


255


 


else


 a.length 


end


 


as


 


varchar


)


+


'


)


'





       


when


 b.name 


in


(


'


bit


'


,


'


int


'


,


'


bigint


'


,


'


tinyint


'


,


'


smallint


'





then


 


'


int


'





       


when


 b.name 


in


(


'


smalldatetime


'


,


'


datetime


'





then


 


'


datetime


'





       


when


 b.name 


in


(


'


money


'


,


'


smallmoney


'





then


 


'


money


'





       


else


 b.name 


end





    


FROM


 tempdb..syscolumns a 


left


 


join


 tempdb..systypes b 


on


 a.xtype


=


b.xusertype



    


where


 b.name 


not


 


in


(


'


image


'


,


'


text


'


,


'


uniqueidentifier


'


,


'


sql_variant


'


,


'


ntext


'


,


'


varbinary


'


,


'


binary


'


,


'


timestamp


'


)



     


and


 a.id


=


(


select


 id 


from


 tempdb..sysobjects 


where


 name


=


@tbname


)



    



    


select


 


@sql


=


substring


(


@sql


,


2


,


2000


),


@fdlist


=


substring


(


@fdlist


,


2


,


2000


)






    


--


create table







    


select


 


@sql


=


'


create table [


'


+


@sheetname


+


'


](


'


+


@sql


+


'


)


'





    


--


print @sql







    


exec


 


@err


=


sp_oamethod 


@obj


,


'


execute


'


,


@out


 out,


@sql





    


if


 


@err


<>


0


 


goto


 lberr



    


--


print 'nn'







    


--


destroy ole object







    


exec


 


@err


=


sp_oadestroy 


@obj





    


if


 


@err


<>


0


 


goto


 lberr



    


--


print 'nn1'







    


--


导入数据







    



    


set


 


@sql


=


'


openrowset(


''


MICROSOFT.JET.OLEDB.4.0


''


,


''


Excel 8.0;HDR=YES



       ;DATABASE=


'


+


@path


+


@fname


+


'''


,[


'


+


@sheetname


+


'


$])


'





    



    


set


 


@tmpsql


=


'


insert into 


'


+


@sql


+


'


(


'


+


@fdlist


+


'


) select 


'


+


@fdlist


+


'


 from [


'


+


@tbname


+


'


]


'





    


--


print @tmpsql







    


if


 


@orderstr


 


is


 


not


 


null


 


or


 


@orderstr


<>


''





    


begin





        


set


 


@tmpsql


=


@tmpsql


+


'


 order by 


'


+


@orderstr





    


end





    


--


print @tmpsql    







    


exec


(


@tmpsql


)



    



    


set


 


@sql


=


'


drop table [


'


+


@tbname


+


'


]


'





    


exec


(


@sql


)



    


set


 


@IstmpTB


=


0





    



    


return


 


0








lberr:



   



       


EXEC


 sp_displayoaerrorinfo 


@obj





@err





    


--


DELETE TmpTable While Error 







    


IF


 


@IstmpTB


=


1


 



    


BEGIN





        


set


 


@sql


=


'


drop table [


'


+


@tbname


+


'


]


'





        


exec


(


@sql


)



    


END





    


return


 


-


1





lbexit:



    


SELECT


 


@sql


,


@constr


,


@fdlist













GO







SET


 QUOTED_IDENTIFIER 


OFF


 





GO







SET


 ANSI_NULLS 


ON


 





GO



SQLServer2000把指定查询输出为Excel文件的存储过程




推荐阅读
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 本文整理了关于Sia去中心化存储平台的重要网址和资源,旨在为研究者和用户提供全面的信息支持。 ... [详细]
  • Docker 环境下 MySQL 双主同步配置指南
    本文介绍了如何在 Docker 环境中配置 MySQL 的双主同步,包括目录结构的创建、配置文件的编写、容器的创建与设置以及最终的验证步骤。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 在 CentOS 7 环境中使用 MySQL 5.6 镜像启动数据库时遇到权限问题,本文将详细探讨并提供解决方案。 ... [详细]
  • 本文旨在解决 MySQL 无法连接到 localhost 的常见问题,并提供详细的步骤来确保 MySQL 服务正确启动和配置。 ... [详细]
  • BIEE中的最终用户界面被称为Presentation Layer(展现层)。展现层呈现的内容与用户在Web报表开发界面中看到的一致,使用业务语言进行描述,隐藏了技术细节,如星型模型。本文将详细介绍展现层的设计要点及其与业务模型层的关系。 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文讨论了在进行 MySQL 数据迁移过程中遇到的所有 .frm 文件报错的问题,并提供了详细的解决方案和建议。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
author-avatar
泰有趣
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有