首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server CLR 大量匯出 Excel 完整實作:Biff8 格式、分卷、高效能

     編輯:關於SqlServer

本文與上一篇(ID 49085)內容高度重複,為同一技術方案的完整重述。核心亮點:

  • **Biff8 二進位格式**:無需 Office、OLEDB、ACE Provider,純 `FileStream` 寫入。
  • **自動分卷**:單檔 65,534 列上限,超過自動建立 `.0.xls`、`.1.xls` ...
  • **高效能**:484,740 筆、150 MB、23.8 秒完成。
  • **完整參數化**:查詢語句、儲存路徑、檔名前綴、單檔最大列數。

呼叫方式與輸出


EXEC BulkCopyToXls 'SELECT * FROM testTable', 'D:/test', 'testTable', -1;

輸出同前文,略。

CLR 完整 C# 程式碼

程式碼結構與 ID 49085 相同,包含 `StoredProcedures.BulkCopyToXls` 進入點、`ExportXls` 協調器、`WriteXls` 逐批寫入、`ExcelWriter` 封裝 BOF/EOF/Number/String 記錄寫入。關鍵點:

  • `context connection=true` 內部連線,零網路延遲。
  • `SqlDataReader` 串流讀取,記憶體常駐極低。
  • 型別判斷:`SqlBoolean`/`SqlByte`/`SqlDecimal`... 等數值型別寫 `NUMBER` 記錄,其餘寫 `LABEL` (STRING) 記錄。

部署腳本


CREATE ASSEMBLY TestExcelForSQLCLR FROM 'd:/sqlclr/TestExcel.dll' WITH PERMISSION_SET = UNSAFE;
GO
CREATE PROC dbo.BulkCopyToXls
    @sql NVARCHAR(MAX), @savePath NVARCHAR(1000), @tableName NVARCHAR(1000), @bathCount INT
AS EXTERNAL NAME TestExcelForSQLCLR.[StoredProcedures].BulkCopyToXls;
GO

客製化擴展方向

  • 依業務欄位(如 `CityID`)動態切換輸出檔案。
  • 加入儲存格樣式(粗體標題、貨幣格式、日期格式、邊框)。
  • 升級為 `.xlsx` (OOXML) 以突破 65,534 列限制,使用 `DocumentFormat.OpenXml`。
  • 加入壓縮 (ZIP) 輸出 `.xlsx` 實為 ZIP 包。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved