SQL Server表中數(shù)據(jù)按條件批量導(dǎo)出為多個(gè)Excel文件
SQL Server表中數(shù)據(jù)按條件批量導(dǎo)出為多個(gè)Excel文件是本文我們主要要介紹的內(nèi)容,在一次SQL Server數(shù)據(jù)庫(kù)的操作中,需要將某個(gè)有數(shù)十萬(wàn)行數(shù)據(jù)的表按類(lèi)別導(dǎo)出為xls文件,每個(gè)類(lèi)別一個(gè)xls。將數(shù)據(jù)表中的數(shù)據(jù)導(dǎo)出并保存為xls簡(jiǎn)單,用SSIS或者查詢(xún)出來(lái)之后另存為都可以。但是,這個(gè)表中的分類(lèi)有數(shù)百個(gè),如果一個(gè)個(gè)用SSIS或者查詢(xún)另存為的話,工作量巨大。前思后想,想到了用while循環(huán)查詢(xún),并用bcp導(dǎo)出的方法。
下面是相關(guān)代碼:
- --聲明需要的變量
- declare @sql varchar(600),@TypeID int
- --確認(rèn)***個(gè)分類(lèi)的ID
- select @TypeID=min(TypeID) from t_TestTable
- --當(dāng)存在滿足分類(lèi)ID的記錄時(shí)進(jìn)行處理
- while exists(select 1 from t_TestTable where TypeID=@TypeID)
- begin
- --拼湊需要執(zhí)行的語(yǔ)句
- set @sql='bcp "select * from (select'+'''列名1'''+' AS 列名1,'+'''列名2'''+' AS 列名2,'+'''列名3'''+' AS 列名3'--在xls文件中顯示列名
- set @sql=@sql+' union all select 列名1,列名2,列名3 from t_TestTable where TypeID='+cast(@TypeID as varchar(8))+')a" queryout "F:\datafile\TypeData'+cast(@TypeID as varchar(8))+'.xls" -c -q -S"ServerName" -U"sa" -P"SAPASSWORD" -d"DBName"'--查詢(xún)滿足條件的記錄并保存到xls文件中
- --使用xp_cmdshell系統(tǒng)存儲(chǔ)過(guò)程執(zhí)行拼湊好的語(yǔ)句(需要使用高級(jí)選項(xiàng)開(kāi)關(guān)預(yù)先開(kāi)啟cmdshell組件)
- exec master..xp_cmdshell @sql
- --獲得下一個(gè)分類(lèi)的ID(分類(lèi)ID是不連續(xù)的)
- select @TypeID=isnull(min(TypeID),@TypeID+1) from t_TestTable where TypeID>=@TypeID+1
- end
以上就是SQL Server表中數(shù)據(jù)按條件批量導(dǎo)出為多個(gè)Excel文件的實(shí)現(xiàn)方法,本文就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!
【編輯推薦】