單一資料表數十萬筆,需依分類欄位(數百類)各自匯出為獨立 Excel 檔。逐手操作 SSIS 或另存新檔不切實際。
-- 1. 啟用 xp_cmdshell(需系統管理員)
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
-- 2. 批量匯出核心腳本
DECLARE @sql VARCHAR(8000), @TypeID INT;
-- 取得第一個分類 ID
SELECT @TypeID = MIN(TypeID) FROM t_TestTable;
WHILE EXISTS (SELECT 1 FROM t_TestTable WHERE TypeID = @TypeID)
BEGIN
-- 動態組裝 BCP 指令
SET @sql = 'bcp "SELECT * FROM (SELECT ' +
'''Col1'' AS Col1, ' + '''Col2'' AS Col2, ' + '''Col3'' AS Col3 ' + -- 標題列
'UNION ALL SELECT Col1, Col2, Col3 FROM t_TestTable WHERE TypeID = ' +
CAST(@TypeID AS VARCHAR(10)) + ') t" ' +
'queryout "F:\DataExport\TypeData_' + CAST(@TypeID AS VARCHAR(10)) + '.xls" ' +
'-c -q -S"ServerName" -U"sa" -P"Password" -d"DBName"';
-- 執行匯出
EXEC master..xp_cmdshell @sql;
-- 取得下一個分類 ID(支援不連續 ID)
SELECT @TypeID = ISNULL((SELECT MIN(TypeID) FROM t_TestTable WHERE TypeID > @TypeID), @TypeID + 1);
END
| 參數 | 用途 |
|---|---|
-c | 字元模式(預設 tab 分隔,適合 Excel 開啟) |
-q | 識別碼加雙引號,支援含空格/保留字的欄位名 |
-S | 目標伺服器名稱 |
-U/-P | 登入帳密 |
-d | 資料庫名稱 |
| 查詢結果導出至檔案 |
-T)或 Proxy Accountxp_cmdshell 為高風險功能,用畢即關閉:EXEC sp_configure 'xp_cmdshell', 0; RECONFIGURE;