2016-12-02 5 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' 
    ) 

. 테이블의 항목을 확인하고 파일의 데이터가 테이블에 단일 행으로 삽입되었음을 확인했습니다.

이 문제의 원인은 무엇일까요? 달성하려고하는 것은 테이블의 개별 행에 해당 행을 삽입하는 것입니다. 난 그냥 자동으로 ID를 생성하여이 나는 쿼리를 이야기하는 방법을 잘 모르겠습니다으로 덮어 쓰기됩니다 경우에도 정수를 지정된 파일에, 그래서 첫 번째 열이 실제로 ID 열 enter image description here

아래를 참조하십시오 (긴) 이미지 두 번째 필드에서 삽입을 시작합니다.

실제 테이블에 작성된 열이 파일에 지정된 것보다 많아서 모든 내용을 채울 필요가 없기 때문입니다. 그것이 원인 일 수 있습니까?

+1

좋아하는 텍스트 편집기를 확인하여 모든 기호가 무엇인지 확인하십시오. 예 : 메모장 ++에서 "모든 기호 표시"를 활성화합니다. 아마도 행은'\ 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). 하나의 좋은 대답을 올린 다음 다른 질문을 중복으로 닫으려면 vote/flag를 사용하십시오. 질문이 중복이 아닌 경우 * 질문에 대한 답변을 작성하십시오. 이 글이 잘 접수되었으므로 [다른 사본] (https://stackoverflow.com/questions/40757662/simple-sql-bulk-insert-not-working/40758128#40758128)을 삭제했습니다. –