天天看點

SQL表中資料按條件批量導出多個Excel檔案

SQL Server表中資料按條件批量導出為多個Excel檔案是本文我們主要要介紹的内容,在一次SQL Server資料庫的操作中,需要将某個有數十萬行資料的表按類别導出為xls檔案,每個類别一個xls。将資料表中的資料導出并儲存為xls簡單,用 SSIS或者查詢出來之後另存為都可以。但是,這個表中的分類有數百個,如果一個個用SSIS或者查詢另存為的話,工作量巨大。前思後想,想到了用 while循環查詢,并用bcp導出的方法。

  下面是相關代碼:

--聲明需要的變量 

declare @sql varchar(600),@TypeID int 

--确認第一個分類的ID 

select @TypeID=min(TypeID) from t_TestTable 

--當存在滿足分類ID的記錄時進行處理 

while exists(select 1 from t_TestTable where [email protected]) 

begin 

--拼湊需要執行的語句 

set @sql='bcp "select * from (select'+'''列名1'''+' AS 列名1,'+'''列名2'''+' AS 列名2,'+'''列名3'''+' AS 列名3'--在xls檔案中顯示列名 

set @[email protected]+' union all select 列名1,列名2,列名3 from t_TestTable where TypeID='+cast(@TypeID as varchar(8))+')a" queryout "F:datafileTypeData'+cast(@TypeID as varchar(8))+'.xls" -c -q -S"ServerName" -U"sa" -P"SAPASSWORD" -d"DBName"'--查詢滿足條件的記錄并儲存到xls檔案中 

--使用xp_cmdshell系統存儲過程執行拼湊好的語句(需要使用進階選項開關預先開啟cmdshell元件) 

exec master..xp_cmdshell @sql 

--獲得下一個分類的ID(分類ID是不連續的) 

select @TypeID=isnull(min(TypeID),@TypeID+1) from t_TestTable where TypeID>[email protected]+1 

end