sqlserver在T-sql里使用bcp导出excel


--第一步,开启高级功能
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---联系

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章