彙整 SQL Server 與 Excel、文字檔、DBF、FoxPro、Access、Oracle 等異構資料源雙向匯入匯出的標準 T-SQL 語法與命令列工具。
bcp "SELECT * FROM DB.dbo.Table" queryout "D:\Export\Data.txt" -c -t, -T -S ServerName
bcp DB.dbo.Table out "D:\Export\Data.xls" -c -q -T -S ServerName
bcp DB.dbo.Table in "D:\Import\Data.txt" -c -t, -T -S ServerName
SELECT * FROM OPENROWSET(
'Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=D:\Data.xlsx;HDR=YES',
'SELECT * FROM [Sheet1$]'
);
SELECT * FROM OPENROWSET(
'Microsoft.ACE.OLEDB.12.0',
'Text;Database=D:\Import\;HDR=YES',
'SELECT * FROM [Data.txt]'
);
SELECT * FROM OPENROWSET(
'MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceDB=D:\Data;SourceType=DBF',
'SELECT * FROM Customer'
);
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'D:\Target.accdb;', 'TableName')
SELECT * FROM SourceTable;
BULK INSERT DB.dbo.Table
FROM 'D:\Import\Data.txt'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
FIRSTROW = 2, -- 跳過標題列
CODEPAGE = '65001', -- UTF-8
TABLOCK -- 鎖定表提升效能
);
sp_configure 'show advanced options', 1; RECONFIGURE;sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE; (OPENROWSET/OPENDATASOURCE 需要)sp_configure 'xp_cmdshell', 1; RECONFIGURE; (BCP 命令列需要)BCP 適合大量高效能批次;OPENROWSET 適合 Ad Hoc 異構查詢;BULK INSERT 適合 T-SQL 內建批次載入;SSIS 適合複雜 ETL 流程。依資料量、頻率、轉換複雜度選擇最適工具。