仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1563|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL网页设计一个将数据导出到EXCEL的存储历程

[复制链接]
莫相离 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:38:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
支持大型的数据库。可以处理拥有上千万条记录的大型数据库。excel|存储历程|数据
/*--数据导出EXCEL

导出查询中的数据到Excel,包括字段名,文件为真实的Excel文件
,假如文件不存在,将主动创立文件
,假如表不存在,将主动创立表
基于通用性思索,仅撑持导出尺度数据范例
邹建
--*/

/*--挪用示例

p_exporttb@sqlstr=select*from区域材料
,@path=c:,@fname=aa.xls,@sheetname=区域材料
--*/



createprocp_exporttb
@tbnamesysname,--要导出的表名
@pathnvarchar(1000),--文件寄存目次
@fnamenvarchar(250)=--文件名,默许为表名
as
declare@errint,@srcnvarchar(255),@descnvarchar(255),@outint
declare@objint,@constrnvarchar(1000),@sqlvarchar(8000),@fdlistvarchar(8000)

--参数检测
ifisnull(@fname,)=set@fname=@tbname+.xls

--反省文件是不是已存在
ifright(@path,1)set@path=@path+
createtable#tb(abit,bbit,cbit)
set@sql=@path+@fname
insertinto#tbexecmaster..xp_fileexist@sql

--数据库创立语句
set@sql=@path+@fname
ifexists(select1from#tbwherea=1)
set@constr=DRIVER={MicrosoftExcelDriver(*.xls)};DSN=;READONLY=FALSE
+;CREATE_DB="+@sql+";DBQ=+@sql
else
set@constr=Provider=Microsoft.Jet.OLEDB.4.0;ExtendedProperties="Excel8.0;HDR=YES
+;DATABASE=+@sql+"


--毗连数据库
exec@err=sp_oacreateadodb.connection,@objout
if@err0gotolberr

exec@err=sp_oamethod@obj,open,null,@constr
if@err0gotolberr

/*--假如掩盖已存在的表,就加高低面的语句
--创立之前先删除表/假如存在的话
select@sql=droptable[+@tbname+]
exec@err=sp_oamethod@obj,execute,@outout,@sql
--*/

--创立表的SQL
select@sql=,@fdlist=
select@fdlist=@fdlist+,[+a.name+]
,@sql=@sql+,[+a.name+]
+casewhenb.namein(char,nchar,varchar,nvarchar)then
text(+cast(casewhena.length>255then255elsea.lengthendasvarchar)+)
whenb.namein(tynyint,int,bigint,tinyint)thenint
whenb.namein(smalldatetime,datetime)thendatetime
whenb.namein(money,smallmoney)thenmoney
elseb.nameend
FROMsyscolumnsaleftjoinsystypesbona.xtype=b.xusertype
whereb.namenotin(image,text,uniqueidentifier,sql_variant,ntext,varbinary,binary,timestamp)
andobject_id(@tbname)=id
select@sql=createtable[+@tbname
+](+substring(@sql,2,8000)+)
,@fdlist=substring(@fdlist,2,8000)
exec@err=sp_oamethod@obj,execute,@outout,@sql
if@err0gotolberr

exec@err=sp_oadestroy@obj

--导进数据
set@sql=openrowset(MICROSOFT.JET.OLEDB.4.0,Excel8.0;HDR=YES
;DATABASE=+@path+@fname+,[+@tbname+$])

exec(insertinto+@sql+(+@fdlist+)select+@fdlist+from+@tbname)

return

lberr:
execsp_oageterrorinfo0,@srcout,@descout
lbexit:
selectcast(@errasvarbinary(4))as毛病号
,@srcas毛病源,@descas毛病形貌
select@sql,@constr,@fdlist

GO


========================================
NinGoo注:
Excel文件每一个事情表不克不及凌驾65536笔记录


办理举措:

.假如数据量年夜于65536,能够在挪用存储历程前先将要导出的table拆分红几个小的一时table,然后
在分离导出到分歧的事情表中

根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。
只想知道 该用户已被删除
沙发
发表于 2015-1-19 19:50:20 | 只看该作者
多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。
admin 该用户已被删除
板凳
发表于 2015-1-28 10:11:16 | 只看该作者
其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。
飘飘悠悠 该用户已被删除
地板
发表于 2015-2-5 20:37:02 | 只看该作者
分区表效率问题肯定是大家关心的问题。在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。但是如果按照非分区字段进行查询,效率会低于未分区表的相同语句。
小妖女 该用户已被删除
5#
发表于 2015-2-13 13:16:51 | 只看该作者
而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~
不帅 该用户已被删除
6#
发表于 2015-3-3 21:51:32 | 只看该作者
sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西
蒙在股里 该用户已被删除
7#
发表于 2015-3-11 14:09:22 | 只看该作者
对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。
小女巫 该用户已被删除
8#
发表于 2015-3-18 22:29:44 | 只看该作者
分区表效率问题肯定是大家关心的问题。在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。但是如果按照非分区字段进行查询,效率会低于未分区表的相同语句。
愤怒的大鸟 该用户已被删除
9#
发表于 2015-3-26 19:48:54 | 只看该作者
SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 21:47

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表