2017-01-17 1 views
2

나는 파이프 플랫 파일을 구분 가져 오기 위해 노력하지만 오류가 아래에 무엇입니까 :대량 삽입 : FieldTerminator, 캐리지 리턴, 뉴 라인 문자를 가진 플랫 파일로 RowTerminator

메시지 4832, 수준 16, 상태 1, 줄 1 대량로드 : 데이터 파일에서 예상치 못한 파일 끝에 도달했습니다. 메시지 7399, 수준 16, 상태 1, 수준 1 "(null)"연결된 서버에 대한 OLE DB 공급자 "BULK"에서 오류가 발생했습니다. 공급자가 오류에 대한 정보를 제공하지 않았습니다. 메시지 7330, 수준 16, 상태 2, 줄 1 연결된 서버 "(null)"의 OLE DB 공급자 "BULK"에서 행을 가져올 수 없습니다.

내 코드 :

IF OBJECT_ID('tempdb..##tblImport') IS NOT NULL DROP TABLE tempdb..##tblImport; 

CREATE Table ##tblImport (VoucherNumber BIGINT,Currency VARCHAR(100),VoucherAmount MONEY, RetailAmount MONEY, VoucherDuration INT, ServiceProviderGroupID INT, BatchNumber BIGINT, SerialNumber int) 

    DECLARE @SQL VARCHAR(2000) 
    DECLARE @FilePath VARCHAR(1000) 

    SET @FilePath = 'C:\Users\Documents\Sample.txt' 
    SET @SQL = 'bulk insert ##tblImport from ''C:\Users\Documents\Sample.txt'' 
    WITH 
    (
     FIELDTERMINATOR = ''|'', 
     ROWTERMINATOR = ''|\n'' 
    )' 

    EXEC(@SQL) 

SELECT * FROM ##tblImport 

내가 행의 끝 부분에있는 파이프를 삭제하고 단지 '\ n'을 저도 같은 오류를 얻을 수있는 코드에서 행 구분 기호를 변경하려고하면. 일련 번호를 열에서 VARCHAR (MAX)으로 변경하려고 시도한 다음 마지막 열이 모든 레코드를 채우는 것입니다. 위의 오류를 다시 \ n 전에 공간을 제공하십시오. 누군가가 데이터를 가져 오기위한 코드를 도와 주시겠습니까?

+0

FIELDTERMINATOR = ''| '', ROWTERMINATOR = ''| \ n '' 구분 기호 앞에 공백을 넣으면 아래 오류가 표시됩니다. 행 1, 열 8 (일련 번호)에 대한 대량로드 데이터 변환 오류 (형식이 일치하지 않거나 지정된 코드 페이지에 대해 유효하지 않은 문자) ** –

+0

FYI : @FilePath 변수가 선언되었지만 사용되지 않았습니다. –

+0

예. 나는 그것을 바꿀 것이다. 고맙습니다. @SQL_Underworld –

답변

0

SQL Server에서 캐리지 리턴 \ r이 기본적으로 새 줄 문자 \ n (예 : [CR] [LF])로 읽혀지는 곳을 읽었습니다. 그러나 그것은 정확하지 않습니다. 내 파일은 각 행 끝에 캐리지 리턴과 새 줄 문자가 있습니다. 그래서 아래 행 구분 기호를 변경했습니다.

ROWTERMINATOR = ''|\r\n'' 

완벽하게 작동하고 문제가 해결되었습니다.

0

'|' 필드/열을 구분하고 '| \ n'은 레코드/행을 분리합니다. 즉, 모든 레코드는 '| \ n'으로 끝나야 다음 레코드의 시작을 나타냅니다.

+0

예. 그러나 그것은 일어나지 않습니다. 파일에 문제가있어 각 행 끝에 파이프 구분 기호를 삭제해도 아무 것도 찾을 수 없기 때문에 찾을 수 없습니다. –

+0

그럼 코드에 문제가 있습니까? –

+0

예. 하지만 그 문제를 극복하기 위해 코드를 개선해야합니다. –