2016-12-02 99 views
0

我試圖使用BULK INSERT從.csv文件向現有表中添加行。現在我有一個測試的目的具有以下格式的小文件:BULK INSERT未正確插入CSV

UserID,Username,Firstname,Middlename,Lastname,City,Email,JobTitle,Company,Manager,StartDate,EndDate 
273,abc,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd 
274,dfg,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd 
275,hij,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd 

而這正是我的查詢目前看起來像:

BULK INSERT DB_NAME.dbo.Users 
    FROM 'C:\data.csv' 
    WITH 
    (
     FIRSTROW = 2, 
     FIELDTERMINATOR = ',', 
     ROWTERMINATOR = '\n' 
    ) 

當我執行此查詢返回1行受影響。我檢查了表中的條目並注意到文件中的數據作爲單行插入到表中。

這可能是什麼原因造成的?我試圖完成的是將這些行插入表中的各行中。見(長)圖像下方 enter image description here

第一列實際上是一個IDENTITY列,以便在文件我只指定一個整數,即使通過自動生成的ID就會被改寫,因爲我不知道如何告訴查詢開始從第二場開始插入。

實際表格中創建的列數多於文件中指定的數量,因爲並非所有內容都需要填充。這可能會導致它?

+1

檢查你最喜歡的文本編輯器,看看所有的符號是什麼。例如在Notepad ++中啓用「顯示所有符號」。也許你的行以'\ r'而不是'\ r \ n'結尾。 –

+1

對於測試,您是否可以創建一個沒有標識字段的臨時表,並取出WITH語句以查看返回的數據? –

+0

根據字符編碼的不同,新的換行符被標記爲不同。你用'/ r/n'試過了嗎? – Fka

回答

2

問題是您正在將數據加載到第一列中。要跳過列,只需在要添加的列和BULK INSERT視圖的表格中創建一個視圖。見下面的例子(從MSDN:https://msdn.microsoft.com/en-us/library/ms179250.aspx):

CREATE VIEW v_myTestSkipCol AS 
    SELECT Col1,Col3 
    FROM myTestSkipCol; 
GO 

USE AdventureWorks2012; 
GO 
BULK INSERT v_myTestSkipCol 
FROM 'C:\myTestSkipCol2.dat' 
WITH (FORMATFILE='C:\myTestSkipCol2.xml'); 
GO 

我會建議你做的卻是創建該文件完全匹配一個臨時表。將數據加載到該表中,然後使用INSERT語句將其複製到永久表中。這種方法更加健壯和靈活。例如,加載登臺表後,您可以在加載永久表之前執行一些數據驗證或清理。

+1

請[不要發佈相同的答案多個問題](https://meta.stackexchange.com/q/104227)。發佈一個很好的答案,然後投票/標記以重複關閉其他問題。如果問題不重複,*定製您對問題*的答案。我刪除了[另一個副本](https://stackoverflow.com/questions/40757662/simple-sql-bulk-insert-not-working/40758128#40758128),因爲這一個已被廣泛接受。 –