將 Excel 中的資料匯入到 SQL Server 或 Azure SQL Database
有數種方式可以將 Excel 檔案中的資料匯入到 SQL Server 或 Azure SQL Database。 某些方法可讓您只執行一個步驟,便能直接從 Excel 檔案匯入資料;其他方法會要求先將 Excel 資料匯出成文字 (CSV 檔案) 才可匯入這些文字。
本文摘要說明常用的方法,並提供連結,為您提供更詳細的資訊。 針對複雜工具與服務 (例如 SSIS 或 Azure Data Factory) 的完整描述不在此文章的涵蓋範圍內。 若要深入了解您感興趣的解決方案,請遵循提供的連結。
方法清單
有數種方式可從 Excel 匯入資料。 您需要安裝 SQL Server Management Studio (SSMS),才能使用其中一些工具。
您可以使用下列工具來從 Excel 匯入資料:
先匯出成文字 (SQL Server 和 Azure SQL 資料庫) | 直接從 Excel 匯入 (僅限 SQL Server 內部部署) |
---|---|
匯入一般檔案精靈 | SQL Server 匯入和匯出精靈 |
BULK INSERT 陳述式 | SQL Server Integration Services (SSIS) |
大量複製工具 (bcp) | OPENROWSET 函數 |
複製精靈 (Azure Data Factory) | |
Azure Data Factory |
如果想要從 Excel 活頁簿匯入多個工作表,則通常必須針對每個工作表執行一次這些工具的任何一個。
若要深入了解,請參閱將資料載入到 Excel 檔案或從 Excel 檔案載入資料的限制與已知問題。
匯入和匯出精靈
使用 [SQL Server 匯入和匯出精靈] 從 Excel 檔案直接匯入資料。 您也可以將設定儲存為 SQL Server Integration Services (SSIS) 封裝,以便日後自訂及重複使用。
在 SQL Server Management Studio 中,連線到 SQL Server 資料庫引擎的執行個體。
展開 [資料庫] 。
以滑鼠右鍵按一下資料庫。
選取 [工作]。
選擇 [匯入資料] 或 [匯出資料]:
這會啟動精靈:
如需詳細資訊,請參閱下列文章:
Integration Services (SSIS)
如果您熟悉 SQL Server Integration Services (SSIS) 且不想執行 SQL Server 匯入和匯出精靈,則可建立在資料流程中使用 Excel 來源與 SQL Server 目的地的 SSIS 封裝。
如需詳細資訊,請參閱下列文章:
若要開始學習如何建置 SSIS 套件,請參閱如何建立 ETL 套件的教學課程。
OPENROWSET 和連結的伺服器
重要
在 Azure SQL 資料庫中,您無法直接從 Excel 匯入。 您必須先將資料匯出成文字 (CSV) 檔案 (部分機器翻譯)。
下列範例會使用 JET 提供者,因為 Office 隨附的 ACE 提供者專為互動式客戶端使用而設計,來連接到 Excel 數據源。
分散式查詢
使用 Transact-SQL OPENROWSET
或 OPENDATASOURCE
函式,直接從 Excel 將資料匯入至 SQL Server。 此使用方式稱為「分散式查詢」 。
重要
在 Azure SQL 資料庫中,您無法直接從 Excel 匯入。 您必須先將資料匯出成文字 (CSV) 檔案 (部分機器翻譯)。
在您可以執行分散式查詢之前,必須啟用 Ad Hoc Distributed Queries
伺服器設定選項,如下列範例所示。 如需詳細資訊,請參閱伺服器組態選項:特定分散式查詢。
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
下列程式碼範例使用 OPENROWSET
,將資料從 Excel Sheet1
工作表匯入至新的資料庫資料表。
USE ImportFromExcel;
GO
SELECT * INTO Data_dq
FROM OPENROWSET('Microsoft.JET.OLEDB.4.0',
'Excel 8.0; Database=C:\Temp\Data.xls', [Sheet1$]);
GO
以下是使用 OPENDATASOURCE
的相同範例。
USE ImportFromExcel;
GO
SELECT * INTO Data_dq
FROM OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',
'Data Source=C:\Temp\Data.xls;Extended Properties=Excel 8.0')...[Sheet1$];
GO
若要將匯入的資料「附加」 到「現有」 的資料表,而不建立新的資料表,請使用 語法,而不是上述範例中使用的 語法。
若要查詢 Excel 資料但不進行匯入,請直接使用標準 SELECT ... FROM ...
語法。
如需分散式查詢的詳細資訊,請參閱下列文章:
1 SQL Server 中仍支援分散式查詢,但適用於此功能的文件並未更新。
連結的伺服器
您也可以將 SQL Server 到 Excel 檔案的持續連線設定為「連結的伺服器」 。 下列範例會將資料從現有 Excel 連結伺服器 Data
的 EXCELLINK
工作表匯入至名為 Data_ls
的新 SQL Server 資料庫資料表。
USE ImportFromExcel;
GO
SELECT * INTO Data_ls FROM EXCELLINK...[Data$];
GO
您可以從 SQL Server Management Studio (SSMS),或是執行系統預存程序 sp_addlinkedserver
(如下列範例所示) 來建立連結的伺服器。
DECLARE @RC INT;
DECLARE @server NVARCHAR(128);
DECLARE @srvproduct NVARCHAR(128);
DECLARE @provider NVARCHAR(128);
DECLARE @datasrc NVARCHAR(4000);
DECLARE @location NVARCHAR(4000);
DECLARE @provstr NVARCHAR(4000);
DECLARE @catalog NVARCHAR(128);
-- Set parameter values
SET @server = 'EXCELLINK';
SET @srvproduct = 'Excel';
SET @provider = 'Microsoft.JET.OLEDB.4.0';
SET @datasrc = 'C:\Temp\Data.xls';
SET @provstr = 'Excel 8.0';
EXEC @RC = [master].[dbo].[sp_addlinkedserver] @server,
@srvproduct,
@provider,
@datasrc,
@location,
@provstr,
@catalog;
如需連結的伺服器的詳細資訊,請參閱下列文章:
如需連結的伺服器與分散式查詢的更多範例與詳細資訊,請參閱下列文章:
必要條件
若要使用此頁面所描述的剩餘方法 (BULK INSERT
陳述式、bcp 工具或 Azure Data Factory),您必須先將 Excel 資料匯出為文字檔。
將 Excel 資料儲存為文字
在 Excel 中,選取 [檔案] | [另存新檔],然後選取 [文字檔 (Tab 字元分隔) (*.txt)] 或 [CSV (逗號分隔) (*.csv)] 作為目的地檔案類型。
如果您想要從活頁簿匯出多個工作表,請選取每個工作表,然後重複此程序。 另存新檔命令只會匯出使用中工作表。
提示
若要取得資料匯入工具的最佳結果,請儲存僅包含資料行標題和包含資料之資料列的工作表。 如果儲存的資料包含頁面標題、空白行、註解和其他內容,您稍後在匯入資料時可能會看到非預期的結果。
匯入一般檔案精靈
逐步設定「匯入一檔案精靈」的每個頁面,匯入儲存為文字檔的資料。
如先前必要條件一節中所述,您必須將 Excel 資料匯出成文字,才能使用「匯入一般檔案精靈」將它匯入。
如需「匯入一般檔案精靈」的詳細資訊,請參閱將一般檔案匯入 SQL 精靈。
BULK INSERT 命令
BULK INSERT
是您可從 SQL Server Management Studio 執行的 Transact-SQL 命令。 下列範例會將來自 Data.csv
逗號分隔檔案的資料載入至現有資料庫資料表。
如先前必要條件一節中所述,您必須將 Excel 資料匯出成文字,才能使用 BULK INSERT
將它匯入。
BULK INSERT
無法直接讀取 Excel 檔案。 您可以使用 BULK INSERT
命令匯入儲存在本機或 Azure Blob 儲存體中的 CSV 檔案。
USE ImportFromExcel;
GO
BULK INSERT Data_bi FROM 'C:\Temp\data.csv'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
GO
如需 SQL Server 和 Azure SQL 資料庫的詳細資訊與範例,請參閱下列文章:
大量複製工具 (bcp)
bcp 工具會從命令提示字元執行。 下列範例會將來自 Data.csv
逗號分隔檔案的資料載入至現有 Data_bcp
資料庫資料表。
如先前必要條件一節中所述,您必須將 Excel 資料匯出成文字,才能使用 bcp 將它匯入。 bcp 工具無法直接讀取 Excel 檔案。 用於從儲存在本機儲存體的測試 (CSV) 檔案匯入至 SQL Server 或 SQL Database。
重要
針對儲存在 Azure Blob 儲存體中的文字 (CSV) 檔案,請使用 BULK INSERT
或 OPENROWSET
。 如需範例,請參閱使用 BULK INSERT 或 OPENROWSET(BULK...) 將資料匯入 SQL Server。
bcp.exe ImportFromExcel..Data_bcp in "C:\Temp\data.csv" -T -c -t ,
如需 bcp 的詳細資訊,請參閱下列文章:
複製精靈 (ADF)
逐步設定 Azure Data Factory (ADF) 複製精靈的每個頁面,匯入儲存為文字檔的資料。
如先前必要條件一節中所述,您必須將 Excel 資料匯出成文字,才能使用 Azure Data Factory 將它匯入。 Data Factory 無法直接讀取 Excel 檔案。
如需複製精靈的詳細資訊,請參閱下列文章:
Azure Data Factory
如果您熟悉 Azure Data Factory,且不想執行 [複製精靈],請建立具有 [複製] 活動的管線,以從文字檔複製至 SQL Server 或 Azure SQL Database。
如先前必要條件一節中所述,您必須將 Excel 資料匯出成文字,才能使用 Azure Data Factory 將它匯入。 Data Factory 無法直接讀取 Excel 檔案。
如需使用這些 Data Factory 來源與接收的詳細資訊,請參閱下列文章:
若要開始學習如何使用 Azure Data Factory 來複製資料,請參閱下列文章: