SQL Server 跨異質資料源匯入匯出 (Excel、文字檔、DBF、Access、XML、資料庫間) 最全語法彙總,含 bcp、OPENROWSET、OPENDATASOURCE、BULK INSERT、DTS 套件、XML 大量載入、二進位檔案處理預存程序。
bcp "dbname..tablename" out "c:\data.txt" -c -t, -T -S servername
bcp "SELECT * FROM dbname..tablename" queryout "c:\data.txt" -c -t, -T -S servername
-c 字元模式、-t, 欄位分隔逗號、-T 信任連線、-w Unicode (雙位元組)
bcp "dbname..tablename" in "c:\data.txt" -c -t, -T -S servername
bcp "dbname..tablename" out "c:\temp.xls" -c -q -T -S servername
SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\test.xls";Extended Properties=Excel 8.0')...[Sheet1$]
INSERT INTO OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\out.xls";Extended Properties=Excel 8.0')...[Sheet1$]
SELECT * FROM dbname..tablename
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Text;HDR=YES;FMT=Delimited;Database=c:\', 'SELECT * FROM data.txt')
-- 匯入
SELECT * FROM OPENROWSET('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\', 'SELECT * FROM table.dbf')
-- 匯出 (需預建 DBF 結構)
INSERT INTO OPENROWSET('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\', 'SELECT * FROM table.dbf')
SELECT * FROM dbname..tablename
-- 匯入
INSERT INTO dbname..tablename
SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', 'Data Source=c:\a.mdb')...TableA
-- 匯出
INSERT INTO OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', 'Data Source=c:\a.mdb')...TableA
SELECT * FROM dbname..tablename
BULK INSERT dbname..tablename
FROM 'c:\data.txt'
WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2);
DECLARE @idoc INT, @xml NVARCHAR(MAX);
SET @xml = N' ';
EXEC sp_xml_preparedocument @idoc OUTPUT, @xml;
SELECT * FROM OPENXML(@idoc, '/ROOT/CUSTOMER/ORDER', 2)
WITH (oid CHAR(5), amount FLOAT);
EXEC sp_xml_removedocument @idoc;
CREATE PROC File2Table
@servername VARCHAR(200), @username VARCHAR(200), @password VARCHAR(200),
@tbname VARCHAR(500), -- 'db.dbo.table' 或 'db' (全庫)
@filename VARCHAR(1000), -- 檔案/目錄
@isout BIT -- 1=匯出, 0=匯入
AS
-- 略 (原文含完整游標迴圈邏輯,自動處理全庫所有使用者表)
GO
-- 匯出單表
EXEC File2Table 'server', 'sa', 'pwd', 'db.dbo.table', 'c:\table.txt', 1
-- 匯出全庫 (每表一檔)
EXEC File2Table 'server', 'sa', 'pwd', 'db', 'c:\export_dir\', 1
利用 bcp 格式檔 (/i 參數) 保留二進位完整性,支援大欄位分塊處理。原文含 p_binaryIO 完整碼 (略)。
| 情境 | 推薦工具 | 關鍵優勢 |
|---|---|---|
| 大量資料 (GB級) 自動化排程 | bcp / BULK INSERT | 最高效能、低記憶體、支援平行 |
| Ad-hoc 查詢 Excel/Access/DBF | OPENROWSET / OPENDATASOURCE | 免建立連結伺服器、即時查詢 |
| 整庫遷移/同步 | File2Table / DTS / SSIS | 可視化、轉換邏輯、錯誤處理 |
| XML 結構化匯入 | SQLXML Bulk Load / OPENXML | Schema 驗證、關聯表拆解 |
| 二進位大物件 | p_binaryIO (bcp 格式檔) | 完整性、分塊、無編碼損耗 |