首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server BULK INSERT 高效導入 CSV 文本文件實戰指南

     編輯:關於SqlServer

場景與優勢

BULK INSERT 是 SQL Server 內置的高性能批量導入命令,適用於 CSV、TSV、固定寬度等文本格式,比逐行 INSERT 快數十倍,且無需外部 ETL 工具。

完整實戰腳本

1. 建立目標表

USE TestData;
GO
CREATE TABLE CSVTest (
    ID INT,
    FirstName VARCHAR(40),
    LastName VARCHAR(40),
    BirthDate SMALLDATETIME
);
GO

2. 準備 CSV 文件

路徑:C:\csvtest.txt
內容(無表頭,逗號分隔,換行結束):

1,James,Smith,19750101
2,Meggie,Smith,19790122
3,Robert,Smith,20071101
4,Alex,Smith,20040202

3. 執行批量導入

BULK INSERT CSVTest
FROM 'C:\csvtest.txt'
WITH (
    FIELDTERMINATOR = ',',   -- 字段分隔符
    ROWTERMINATOR = '\n',    -- 行分隔符(Windows 為 \r\n)
    FIRSTROW = 1,            -- 從第 1 行開始(如有表頭設為 2)
    MAXERRORS = 0,           -- 遇錯誤立即停止,改為 >0 可跳過錯誤行
    TABLOCK                  -- 表級鎖,提升大批量導入性能
);
GO

4. 驗證結果

SELECT * FROM CSVTest;
GO

關鍵參數詳解

參數說明常用值
FIELDTERMINATOR字段分隔符','、'\t'、'|'
ROWTERMINATOR行分隔符'\n' (Linux)、'\r\n' (Windows)
FIRSTROW起始行號1(無表頭)、2(有表頭)
MAXERRORS最大容錯行數0(全對)、1000(允許跳過)
ERRORFILE錯誤行輸出文件'C:\err.log'
CODEPAGE字符編碼'RAW'、'ACP'、'65001'(UTF-8)
DATAFILETYPE文件類型'char'、'native'、'widechar'
TABLOCK導入期間獲取表級鎖大幅提升性能,導入期間表不可讀寫

進階場景

格式文件 精確控制映射

當文件列順序、數量與表不一致,或需跳過某列時,使用 .fmt 格式文件:

BULK INSERT CSVTest
FROM 'C:\data.txt'
WITH (FORMATFILE = 'C:\csv.fmt');

大文件分批導入避免日志暴漲

-- 簡單版:配合 BATCHSIZE
BULK INSERT CSVTest
FROM 'C:\big.csv'
WITH (BATCHSIZE = 50000, TABLOCK);

權限要求

  • 執行賬號需有 BULKADMIN 服務器角色或 ADMINISTER BULK OPERATIONS 權限。
  • SQL Server 服務賬號需有文件所在目錄的讀取權限(本地路徑)或網絡共享權限(UNC 路徑)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved