| 缺點 | 對策 |
|---|---|
| 需獨佔目標表 | 離峰時段執行,或使用分區表切換 |
| 產生大量交易記錄 | 導入前切換至 BULK_LOGGED 復原模式,導入後改回 FULL |
| 來源檔案格式受限 | 預處理資料檔,或使用格式化檔 (.fmt) |
-- 1. 切換至大量記錄復原模式(最小化記錄)
ALTER DATABASE Taxi SET RECOVERY BULK_LOGGED;
GO
-- 2. 執行大量導入
BULK INSERT Taxi..Detail
FROM 'E:\out.txt'
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
TABLOCK
);
GO
-- 3. 恢復完整復原模式
ALTER DATABASE Taxi SET RECOVERY FULL;
GO
DATAFILETYPE:char(文字)、native(二進位)、widechar(Unicode)。FIELDTERMINATOR / ROWTERMINATOR:欄位與列分隔符,支援多字元。TABLOCK:導入期間取得表級鎖,大幅提升速度並減少記錄。FORMATFILE:指定 .fmt 檔可處理複雜格式(欄位順序不同、跳過欄位等)。若需逐列驗證或轉換,可先 BULK INSERT 至暫存表,再用 T-SQL 清洗後 INSERT SELECT 進正式表,犧牲少許速度換取資料品質。
掌握 BULK INSERT 與復原模式切換,是 SQL Server 高效能資料載入的核心技能。