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---聯繫

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