博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将SQLServer结果导出为excel文件
阅读量:5322 次
发布时间:2019-06-14

本文共 1845 字,大约阅读时间需要 6 分钟。

相信大家常常会遇到将SqlServer查询结果导出到Excel的问题。如果导出的次数少,直接“Save Results As...”就是了;但是当要分别在每个表取样,那就相当麻烦了。今天就为大家提供一个脱离office组件的可以将语句结果导出到Excel的过程,希望会对大家有帮助! 

---导出到Excel 
---使用说明: 
-- 1.执行时所连接的服务器决定文件存放在哪个服务器 
-- 2.远程查询语句中,要加上数据库名 
ALTER PROC ExportFile 
@QuerySql VARCHAR(max) 
,@Server VARCHAR(20) 
,@User VARCHAR(20) 
,@Password VARCHAR(20) 
,@FilePath NVARCHAR(100) = 'c:\ExportFile.xls' 
AS 
DECLARE @tmp VARCHAR(50) = '[##Table' + CONVERT(VARCHAR(36),NEWID())+']' 
BEGIN TRY 
DECLARE @Sql VARCHAR(max),@DataSource VARCHAR(max)=''; 
--判断是否为远程服务器 
IF @Server <> '.' AND @Server <> '127.0.0.1' 
SET @DataSource = 'OPENDATASOURCE(''SQLOLEDB'',''Data Source='+@Server+';User ID='+@User+';Password='+@Password+''').' 
--将结果集导出到指定的数据库 
SET @Sql = REPLACE(@QuerySql,' from ',' into '+@tmp+ ' from ' + @DataSource) 
PRINT @Sql 
EXEC(@Sql) 
DECLARE @Columns VARCHAR(max) = '',@Data NVARCHAR(max)='' 
SELECT @Columns = @Columns + ',''' + name +''''--获取列名(xp_cmdshell导出文件没有列名) 
,@Data = @Data + ',Convert(Nvarchar,[' + name +'])'--将结果集所在的字段更新为nvarchar(避免在列名和数据union的时候类型冲突) 
FROM tempdb.sys.columns WHERE object_id = OBJECT_ID('tempdb..'+@tmp) 
SELECT @Data = 'SELECT ' + SUBSTRING(@Data,2,LEN(@Data)) + ' FROM ' + @tmp 
SELECT @Columns = 'Select ' + SUBSTRING(@Columns,2,LEN(@Columns)) 
--使用xp_cmdshell的bcp命令将数据导出 
EXEC sp_configure 'xp_cmdshell',1 
RECONFIGURE 
DECLARE @cmd NVARCHAR(4000) = 'bcp "' + @Columns+' Union All ' + @Data+'" queryout ' + @FilePath + ' -c -T' 
PRINT @cmd 
exec sys.xp_cmdshell @cmd 
EXEC sp_configure 'xp_cmdshell',0 
RECONFIGURE 
EXEC('DROP TABLE ' + @tmp) 
END TRY 
BEGIN CATCH 
--处理异常 
IF OBJECT_ID('tempdb..'+@tmp) IS NOT NULL 
EXEC('DROP TABLE ' + @tmp) 
EXEC sp_configure 'xp_cmdshell',0 
RECONFIGURE 
SELECT ERROR_MESSAGE() 
END CATCH

PS:先不要着急使用,该版本是基于xp_cmdshell的,因为要创建文件,所以要保证你的用户能有文件管理的权限,通常简单点的方法就是将sql server的启动用户设置为本地系统用户

转载于:https://www.cnblogs.com/from/p/3323908.html

你可能感兴趣的文章
[翻译] java NIO 教程---介绍
查看>>
Java开发小技巧(一)
查看>>
第二天简书
查看>>
iptables 用法
查看>>
MySQL的多表查询(笛卡尔积原理)
查看>>
史上讲得最清楚的树状数组(至少我是这么认为的)
查看>>
POJ 3670 DP LIS?
查看>>
空心菱形的显示
查看>>
简述Oracle IOT(Index Organized Table)
查看>>
Eclipse 常用快捷键清单
查看>>
mysql的配置文件创建相关
查看>>
Indexing GROUP BY
查看>>
[SharePoint][SharePoint Designer 入门经典]Chapter10 Web部件链接
查看>>
jmeter接口测试之登录测试
查看>>
【CQOI2009】中位数
查看>>
ThinkPHP大写单字母函数
查看>>
ELK Stack (2) —— ELK + Redis收集Nginx日志
查看>>
ElasticSearch 2 (19) - 语言处理系列之故事开始
查看>>
NLTK的使用
查看>>
Java面试题之谈谈reactor模型
查看>>