2015-01-14 2 views
0

많은 CSV 파일이 있으며이를 BULK INSERT를 사용하여 MyTable로 가져 오려고합니다. 새 파일을 가져올 때마다 마지막 열인 'ColumnNameWithFileName'에 파일 이름을 삽입하려고합니다. 파일 이름은 file01.csv, file02.csv와 같습니다.CSV를 SQL로 가져와 파일 이름을 마지막 열에 삽입하는 방법은 무엇입니까?

두 번째 파일을 가져 오는 동안 BULK INSERT를 사용하려고하면 잘림 오류가 발생합니다. 아마도 CSV 테이블이 이미 추가 열인 MyTable에 맞지 않기 때문일 수 있습니다. 어떻게 처리할까요?

-- Add a column 'ColumnNameWithFileName' This code done only once ALTER TABLE dbo.MyTable ADD ColumnNameWithFileName VARCHAR(20) NULL
DECLARE CSVFileName VARCHAR(20) -- Bulk insert from CSV file Bulk insert dbo.[MyTable] from 'C:\file01.CSV' with ( fieldterminator =';' ,rowterminator='\n' ,FIRSTROW=2 ,CODEPAGE ='ACP')
-- Insert to new column file name UPDATE dbo.MyTable SET ColumnNameWithFileName = CSVFileName WHERE ColumnNameWithFileName IS NULL

+0

가능한 복제 (http://stackoverflow.com/questions/3915209/sql-bulk-insert-with-additional-column) 당신이 당신을 절단하여 의미합니까 무엇 –

답변

1

이 그것을 할 수있는 더 우아한 방법이 될 수 있지만 그냥이 작업을 수행 할 수있다;

  1. 은 다음 파일
+0

임시 테이블? –

+0

SQL 서버에서는 테이블에서 모든 레코드를 제거하는 truncate 키워드를 사용합니다. DB 엔진도 비슷한 기능을합니다. 질문에 태그를 추가 할 때 데이터베이스 엔진이 무엇인지 포함시키는 것이 좋습니다. 그런 식으로 우리는 좀 더 관련성 높은 답변을 제공 할 수 있으며, 아마도 일부 코드를 제공 할 수 있습니다. –

+0

SQL Server 2008 R2 - 그게 무슨 뜻입니까? –

0

를 사용하여 파일의 변수를 귀하의 임시 테이블

  • 과정을 절단 YourTable
  • 에 임시 테이블에
  • 선택 * 파일 이름을 파일로부터 데이터를 가져 이름 (원하는 경우 파일 경로)을 삽입하고 #temp 테이블에 대량 삽입 한 다음 파일 경로가있는 추가 열이있는 INSERT INTO 최종 테이블을 만듭니다.

    declare @filename varchar(255) 
    set @filename = file.csv 
    CREATE TABLE #Temp 
    BULK INSERT #Temp 
    from 'C:\file01.CSV' with ( 
        fieldterminator =';' 
        ,rowterminator='\n' 
        ,FIRSTROW=2 
        ,CODEPAGE ='ACP') 
    insert into [REALFINALTABLE] 
    select #temp.*, @filename as [FileName] from #Temp 
    --Drop #Temp (In case is not necesary any more) 
    
    [추가 열을 사용하여 SQL 대량 삽입]의
  • 관련 문제