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

SQL Server BULK INSERT 匯入 CSV 檔案完整教學:處理雙引號、欄位數不符、資料清洗

     編輯:SQL Server 2005

基本用法

-- 建立目標表
CREATE TABLE CSVTable (Name NVARCHAR(MAX), Email NVARCHAR(MAX), Area NVARCHAR(MAX)); GO

-- CSV 內容 (D:\csv.txt)
-- Peter, peter@example.com, Taipei
-- Mary, mary@example.com, Taichung

BULK INSERT CSVTable FROM 'D:\csv.txt'
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n');
SELECT * FROM CSVTable; GO

CSV 內容 匯入結果

問題一:部分欄位有雙引號、部分無

CSV:Peter, "peter@example.com", Taipei → 匯入後 Email 含雙引號。
解法:**先匯入暫存表 → 再清洗移除雙引號轉入正式表**。

含雙引號 CSV 匯入含雙引號結果

問題二:所有欄位皆被雙引號包裹

CSV:"Peter","peter@example.com","Taipei"
解法:修改 BULK INSERT 格式檔或暫存表清洗,**格式檔指定引號字元**。
全雙引號 CSV 格式檔設定

問題三:CSV 欄位數多於目標表

CSV 有 5 欄,表只有 3 欄 → 多餘欄位會被塞入最後一欄。
解法:目標表**額外建立暫存欄位**接收多餘資料,清洗後捨棄。
欄位數較多 CSV 多餘欄位塞入最後一欄

最佳實務流程

  1. 建立**暫存表**欄位全為 NVARCHAR(MAX),欄位數 ≥ CSV 最大欄位數。
  2. BULK INSERT #Tmp FROM 'path' WITH (FIELDTERMINATOR=',', ROWTERMINATOR='\n', FIRSTROW=2) (跳過標題列)。
  3. 以 REPLACE、SUBSTRING 等清洗暫存表資料。
  4. INSERT INTO 正式表 SELECT 清洗後欄位 FROM #Tmp。
  5. 清除暫存表。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved