--第一步,开启高级功能
EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'xp_cmdshell',1
RECONFIGURE;
go
--第二步,bcp导出excel
declare @file_path nvarchar(50),@file_name nvarchar(500),@exec_sql nvarchar(4000)
set @file_path = 'D:\' --定义导出excel的绝对路径
set @file_name = 'test' + CONVERT(nvarchar(50), GETDATE(), 112)+'.xls' --定义excel的文件名
set @exec_sql = 'select * from sys.objects a' --定义sql查询语句;数据表需使用的完整路径;sql 语句必须一行完成
set @exec_sql = ' bcp "'+@exec_sql+'" queryout "'+@file_path+''+@file_name+'" -c -T -S "填写数据库服务器名,本机默认数据库为localhost" -U "填写数据库登录账号,如sa" -P "填写数据库登录密码"';
exec xp_cmdshell @exec_sql
--第三步,关闭高级功能
EXEC sp_configure 'xp_cmdshell',0
RECONFIGURE;
go
EXEC sp_configure 'show advanced options', 0;
GO
RECONFIGURE;
GO
可能遇见的问题:
1、xp_cmdshell函数传入参数过长怎么办?
xp_cmdshell函数后只能传入varchar(num)或nvarchar(num)类型的查询语句,连varchar(max)也是不支持的,有8000个字符限制,所以尽量缩小查询语句代码量;
2、T-sql里查询报表时,竖转行怎么写?
详情请查看pivot函数,sql2005后已支持,会比传统的写法大缩小查询语句代码量
3、存储过程问题?
把以上T-sql语句放到存储过程时,只需要把go代码去掉;
4、提示对象名无效,数据表路径问题怎么办?
数据表需使用的完整路径(数据库名.dbo.表名)
5、提示Error = [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user
bcp参数问题,如果所查询的服务器上有多个数据库实例,请使用-S参数指定实例,并设置正确的数据库账号密码
6、导出的数据没有标题怎么办?
使用union自建一行标题数据行
7、使用union合并前,怎样排序?
使用临时表tempdb..#temp,详情请查看临时表的使用,把排序后的查询结果保存到临时表,再使用union合并
8、导出的数据排序失效怎么办?
已在union合并前排序好了,查询结果也排序正常,导出到excel里的数据排序又乱了怎么办?可以union合并后,再保存到另外一张临时表里,再把临时表导出excel。
有需要可加微信-----13412320214---联系