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

SQL Server 匯出/匯入 Excel 兩大經典方法:BCP 與 OPENDATASOURCE

     編輯:關於SqlServer

方法一:BCP 匯出至 Excel(文字檔 .xls 兼容)

EXEC master..xp_cmdshell 
'bcp "SELECT * FROM fsebss.dbo.Resource_GoodsType" queryout "C:\temp1.xls" -c -t, -T -S"SERVER_NAME"';

參數說明:

  • queryout:查詢結果導出(可寫完整 SELECT)。
  • -c:字元模式(預設 tab 分隔,這裡用 -t, 指定逗號)。
  • -T:信任連線(Windows 驗證),或用 -U sa -P pwd。
  • -S:伺服器名稱。
  • 輸出為 CSV 格式,Excel 可直接開啟;若需真正 .xlsx 需後續轉換。

方法二:OPENDATASOURCE / OPENROWSET 直接讀寫 Excel

前置條件

  • 安裝 Microsoft Access Database Engine (ACE OLE DB Provider),32/64 位元需與 SQL Server 執行個體相符。
  • 啟用 Ad Hoc Distributed Queries:
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE;

匯入 Excel 至資料表

INSERT INTO dbo.VPMN_BaseInforList_ML (BI_BaseShopNo, BIL_BaseShopListNo, BIL_Name, BIL_Jobs, BIL_Tel)
SELECT 
    LEFT(成員編號, 11) AS BI_BaseShopNo,
    LEFT(成員編號, 11) + RIGHT(成員編號, 3) AS BIL_BaseShopListNo,
    姓名,
    職位,
    CONVERT(VARCHAR(50), 手機號碼, 120)
FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
    'Data Source="C:\pp.xlsx";Extended Properties="Excel 12.0 Xml;HDR=YES"')...[Sheet1$]
WHERE 姓名 IS NOT NULL;

匯出資料表至 Excel

INSERT INTO OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
    'Data Source="C:\export.xlsx";Extended Properties="Excel 12.0 Xml;HDR=YES"')...[Sheet1$]
SELECT ProductID, ProductName, UnitPrice FROM dbo.Products;

注意:目標 Excel 檔案與工作表必須預先存在,且欄位順序、資料型別需相符。

兩方法比較

面向BCPOPENDATASOURCE
方向僅匯出雙向
效能極高(大量資料首選)中等
格式CSV/文字真正 .xls/.xlsx
需求xp_cmdshell 啟用、檔案系統存取ACE Provider、Ad Hoc Distributed Queries
安全性需 sysadmin 權限需控制伺服器存取 Excel 路徑

現代替代方案

  • SSIS (SQL Server Integration Services):視覺化 ETL、支援 Excel 來源/目的地、錯誤處理、記錄、部署。
  • Azure Data Factory / Synapse Pipelines:雲端原生資料整合。
  • Python / C# 程式:使用 pandas / EPPlus / ClosedXML 彈性處理複雜格式。

常見錯誤排查

錯誤原因解決
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" has not been registered未安裝 ACE Provider 或位元數不符下載安裝對應版本 AccessDatabaseEngine.exe
Cannot create an instance of OLE DB providerAd Hoc Distributed Queries 未啟用執行 sp_configure 啟用
External table is not in the expected formatExcel 版本與 Extended Properties 不符.xls 用 "Excel 8.0",.xlsx 用 "Excel 12.0 Xml"
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved