| 方法 | 適用場景 | 優點 | 缺點 |
|---|---|---|---|
| DTS/SSIS 精靈 | 一次性大量遷移、異構資料庫 | 視覺化、支援轉換邏輯、記錄詳細 | 需圖形介面、難以自動化腳本化 |
| OPENDATASOURCE | 臨時查詢、單次匯入/匯出 | 單行 T-SQL、無需建立物件 | 每次需完整連接字串、效能一般 |
| OPENROWSET | 頻繁存取、預存程序內嵌 | 支援 BULK、可搭配連結伺服器 | 需啟用 Ad Hoc Distributed Queries |
SELECT *
FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source="C:\DB.mdb";User ID=Admin;Password='')...TableName;
SELECT * INTO NewTable
FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source="C:\DB.mdb";User ID=Admin;Password='')...TableName;
INSERT INTO OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source="C:\DB.mdb";User ID=Admin;Password='')...TableName (Col1, Col2)
SELECT Col1, Col2 FROM SqlTable;
SELECT *
FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source="C:\Book1.xls";User ID=Admin;Password=;Extended Properties=Excel 8.0')...[Sheet1$];
注意:工作表名稱需加 $ 並用方括號包裹 [Sheet1$];HDR=YES 表示第一列為標題。
SELECT *
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\Finance\Account.xls;HDR=YES', 'SELECT * FROM [Sheet1$]');
SELECT * INTO NewTable
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\DB.mdb'; 'admin'; '', TableName);
INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\Trade.mdb'; 'admin'; '', TableName)
SELECT * FROM SqlTable;
Microsoft.ACE.OLEDB.12.0 (支援 .xlsx/.accdb)。ADMINISTER BULK OPERATIONS 或 sysadmin (OPENROWSET BULK)。SQL Server 與 Office 檔案互轉,臨時查詢用 OPENDATASOURCE/OPENROWSET 最快;定期 ETL 用 SSIS 最穩健;頻繁存取用連結伺服器最安全。根據頻率、資料量、自動化需求選擇適合工具。