2016-12-02 16 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 

そして、これが私のクエリは、現在のように見えるものです:私はこのクエリを実行すると、それは1行が影響を受ける返し

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

。今の私は、次の書式設定とテスト目的のために小さなファイルを持っています私はテーブルのエントリをチェックし、ファイル内のデータが単一の行としてテーブルに挿入されていることに気付きました。

この原因は何ですか?私が達成しようとしているのは、テーブル内の個々の行にそれらの行を挿入することです。最初の列

enter image description here 以下(ロング)の画像を参照してください。それが自動で上書きされますにもかかわらず、私はちょうど整数を指定したファイルにして、実際にIDENTITY列である私は、クエリを見分ける方法を確認していないとして、IDを生成2番目のフィールドから挿入を開始する。

実際のテーブルに作成された列がファイルに指定されているよりも多くあるため、すべてを満たす必要はありません。それが原因だろうか?

+1

お気に入りのテキストエディタで、すべての記号が何であるかを確認してください。たとえばNotepad ++で "Show All Symbols"を有効にします。おそらくあなたの行は '\ r \ n'ではなく' \ r'で終わるでしょう。 –

+1

テスト用に、IDフィールドなしで一時テーブルを作成し、WITHステートメントを取り出して返されるデータを確認できますか? –

+0

文字のエンコーディングによっては、改行文字の表示が異なります。 '/ r/n'で試しましたか? – Fka

答えて

2

問題は、最初の列にデータをロードしていることです。列をスキップするには、ロードする列だけを表示し、ビューにBULK INSERTを使用して表を作成します。たとえば、以下の(:https://msdn.microsoft.com/en-us/library/ms179250.aspx MSDNから):を参照してください。私はあなたの代わりに行う推薦何

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)ください。 1つの良い答えを投稿し、投票/フラグを立てて他の質問を重複として閉じます。質問が重複でない場合は、*あなたの質問に対する答えを調整してください。私はこれをよく受け取りましたので[他のコピー](https://stackoverflow.com/questions/40757662/simple-sql-bulk-insert-not-working/40758128#40758128)を削除しました。 –

関連する問題