如何将存储过程返回的结果导出为Excel

如何将存储过程返回的结果导出为Excel,第1张

SQL Server有一些工具可用来导出和导入数据。这些简单的工具,例如T-SQL的BULK INSERT语句,或者是BCP工具,都可以将数据以纯文本文件的形式传输。如果需要处理任何一种其他类型的文件的导入导出,则我们必须使用DTS设计器或者DTS向导构建一个DTS包。最终生成的DTS包是一个我们必须测试、维护和 *** 作的独立的对象。而传输数据的工作则变得更加复杂,即使我们只是想要将一个简单的Excel文件传输到文件系统中。
这里,我建议使用一个简单,但是很有用的T-SQL 存储程序,它可以通过使用链接服务器(linked server)技术将数据导出到Excel 中。
为了实现导出,你必须首先创建一个空的有固定名字的Excel文件,并将其放置在服务器上。我把它命名为Emptyxls,并放置在c:temp的目录下。这个文件不会被删除,并且在装入数据之前,作为目标Excel文件的模板使用。
Emptyxls文件被构建的时候,只含有一个工作页,名为ExcelTable,其中的第一行(仅有的一行)包含如下字母: A,B,C,Z。这些字母可作为Excel表的列名称。这意味着在一个查询中,我们可以导出26个列。(给定的存储程序代码可被修改,以支持结果集中含有更多的列的情况。只需要在Excel模板中简单地书写F1, F2 ,F3,然后更改程序中相应列的列表即可反映出变化了。)
sp_write2Excel是一个T-SQL存储过程,它获取目标Excel文件的名字和路径,结果集中列的数量,以及T-SQL查询。在查询中应该使用转换函数将所有的非字符串数据导入列中,因为最终的Excel单元中数据实际上都是字符串格式的。
这个过程将emptyxls模板文件拷贝到新的目标Excel文件中。然后它再构建一个链接服务器到刚才的文件中,并使用动态的T-SQL来构建这个Excel文件,并且使用插入/选择语句来将数据写入其中。
以下是程序代码:
Create proc sp_write2Excel (@fileName varchar(100),
@NumOfColumns tinyint,
@query varchar(200))
as
begin
declare @dosStmt varchar(200)
declare @tsqlStmt varchar(500)
declare @colList varchar(200)
declare @charInd tinyint

set nocount on

-- 构建列的列表 A,B,C
-- 直到达到列的数量
set @charInd=0
set @colList = 'A'
while @charInd < @NumOfColumns - 1
begin
set @charInd = @charInd + 1
set @colList = @colList + ',' + char(65 + @charInd)
end
-- 创建一个空的Excel 文件作为目标文件,通过拷贝模板Excel 文件来命名
set @dosStmt = ' copy c:tempemptyxls ' + @fileName
exec masterxp_cmdshell @dosStmt

-- 创建一个“临时”的链接服务器到刚才的文件中,以用于“导出”数据
EXEC sp_addlinkedserver 'ExcelSource',
'Jet 40',
'MicrosoftJetOLEDB40',
@fileName,
NULL,
'Excel 50'
-- 构建一个T-SQL 语句,用于实际导出查询结果
-- 到目标链接服务器上的表中
set @tsqlStmt = 'Insert ExcelSource[ExcelTable$] ' + ' ( ' + @colList + ' ) '+ @query

print @tsqlStmt
-- 执行动态的 TSQL语句
exec (@tsqlStmt)
-- 删除链接服务器
EXEC sp_dropserver 'ExcelSource'
set nocount off
end
GO
程序使用实例:
Use master
go
exec sp_write2Excel
--目标excel文件
'c:tempNorthProductsxls' ,
-- 结果中列的数量
3,

-- 将要导出结果的查询
'select convert(varchar(10),ProductId),
ProductName,
Convert (varchar(20),UnitPrice) from NorthwindProducts'
结论,这个程序可作为一个通用的工具将数据导出到Excel工作页中,而BCP工具则只能将数据导出到文本文件中。
我们可以使用这个程序来代替DTS包设计器,以及DTS向导,每当需要调用这样的动作的时候,都可以用它将数据导出到excel 文件中。

那是系统数据错误,只有修改程序员命令才可以。

oracle存储过程结束会自动关闭游标吗

1如果你是显式游标(open打开)、如果没有close就会出现死循环。


2而隐式游标(forloop)、没有end loop也是出现死循环。


3直到用户进程断开连接服务器。

建索引时,我们为了建索引快,会加上并行,加上并行之后,此列索引就会是并行了。访问有并行度的索引时,CBO可能可能会考虑并行执行,这可能会引发一些问题,如在服务器资源紧张的时候用并行会引起更加严重的争用。当使用并行后,需要把并行度改回来。
SQL> drop table test purge;
SQL> create table test as select from dba_objects;
SQL> create index ind_t_object_id on test(object_id) parallel 4 ;
SQL> select sdegree
from dba_indexes s
where sindex_name = upper('ind_t_object_id');
DEGREE
----------------------------------------
4
SQL> alter index ind_t_object_id noparallel;
SQL> select sdegree
from dba_indexes s
where sindex_name = upper('ind_t_object_id');
DEGREE
----------------------------------------
1

PRO/E中文版安装较为复杂,下面向大家介绍一个安装方法。(这只是一种比较简洁的安装方法,还可能有更好的安装方法)
1在WIN2000/xp下----控制面板----系统---高级---环境变量---新 建LANG=CHS。
2打开光盘目录CRACK目录把INDPTCEXE内的文件解压到硬盘后 再执行INDPTC把自己网卡的序列号填写进去,以生成一个锁钥 文件LICENSEDAT。(网卡序列号查询方法:首先进入MSDOS状 态键入IPCONFIG/ALL,PCYSICAL ADDRESS后面的一串数字就是 网卡序列号)。
3开始安装,把其他选项都去掉,只对PRO/ENGINEER打勾,按下一 步。
4选择安装的路径,对简体中文打勾按下一步
5选择增加,再选择锁定的许可文件,浏览并选择刚才第二步生成的LICENSEDAT按确定,按下一步。
6按二次下一步,到PTC OLE服务器的界面的语言栏选择CHINESE_CN语言,再按下一步。
7一直按下一步,直到进行安装。

下载的软件如果没有捆绑木马,那么你运行软件不会中毒。
木马,全称特洛伊木马(Trojan horse),这个词语来源于古希腊神话,在计算机领域是一种客户/服务器程序,是黑客最常用的基于远程控制的工具。目前,比较有名的国产木马有:“冰河”、“广外女生”、“黑洞”、“黑冰”等;国外有名的木马则有:“SubSeven”、“Bo2000(Back Orifice)”、“NetSpy”、“Asylum”等。木马对计算机系统和网络安全危害相当大,因此,如何防范特洛伊木马入侵成为了计算机网络安全的重要内容之一。以下为防范木马入侵方法:
1、不要接收陌生人发来的任何压缩包文件及其他类型文件;
2、对可疑的文件(压缩包)进行杀毒;
3、不要接收任何自己不能确定类型的压缩包文件或者其他类型文件;
4、不要到不良网站下载不良信息文件,并加压安装到你的电脑;
5、电脑定期杀毒;

你最好先虚拟个网卡
,以免以后你的网卡坏了不能用pro/e!!
一、如何虚拟网卡
“我的电脑”--〉“控制面板”--〉“添加删除硬件”--〉“下一步”--〉“下一步”,--〉(“搜索”等一段时间)--〉“添加新设备”--〉“下一步”--〉“不,我想从列表选择硬件”--〉“网卡”--〉下一步”--〉“制造商”选择“Microsoft”,--〉网卡选择
“Microsoft
loopback
Adapter”--〉下一步”--〉“下一步”--〉“完成”。
现在你已经有一个虚拟网卡了,查询网卡的ip号:“开始”--〉“程序”--〉附件--〉命令提示符,dos提示符下敲入:ipconfig/all,回车,你会看到“02-00-4c-4f-4f-50”这组数字,这就是你虚拟网卡的ip号。
二、生成license文件。
有了网卡号才能生成里license文件。
将光盘里面的crack目录拷贝到硬盘中,双击“indptc”,会d出以对话框,在hostid一栏里填入“02-00-4c-4f-4f-
50”,点击“creat
license”,这时目录里面会多出一个“license”文件,你的license文件已经生成好了。
三、中文安装
安装英文版的朋友不必做这步。
“我的电脑”--〉“控制面板”--〉“系统”--》“高级”--》“环境变量”(上面那个)--》“新建”
--〉“变量名”填“lang”-->“变量值”填“chs”,(繁体中文填“cht”)。“确定”
--〉“确定”
--〉“确定”。
四、安装pro/e
双击setup,“选择要安装的产品”,只选择“pro/enginner”一项,--〉“下一步”,(等一会),“下一步”--〉到“指定许可证服务器”对话框,选“增加”--〉选“锁定的许可证文件(服务器未运行)”项,在“许可证文件路径”栏指定第二步生成的license文件,(后面的那个文件夹图标是供你浏览的,好找你那个文件)。“确定”“下一步”--〉“下一步”--〉到“ptc
ole服务器”对话框,把两个语言对话框改为“chainese_cn”,“下一步”,到“windows
优先选项”对话框,把“快捷方式位置”的“桌面”打勾选中,一直“下一步”,不用理会其他提问,装完就可以用了。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13445833.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-08
下一篇 2023-08-08

发表评论

登录后才能评论

评论列表(0条)

保存