MSSQL BULK INSERT - 대용량 파일(CSV, TXT) 테이블에 저장하기

MSSQL BULK INSERT – 대용량 파일(CSV, TXT) 테이블에 저장하기

MS SQL에서는 대용량 파일(CSV, TXT, DAT 등)을 테이블에 저장(INSERT) 하기 위해서 BLUK INSERT 구문을 제공하고 있습니다. 저 같은 경우는 2시에 타 시스템으로부터 인사정보를 특정한 폴더에 TXT 파일로 전송을 받고 2시 10분에 배치 작업으로 인터페이스 된 파일을 읽어 테이블에 저장을 합니다. 이때 BLUK INSERT 구문을 사용하여 TXT 파일을 테이블에 저장합니다.

그럼 간단한 예제를 통해서 BLUK INSERT 구문에 대해서 알아보죠.

포스트 기준

– Microsoft SQL Server 2019

– SSMS 18.10

사용 예제

1. 구문 (syntaxsql)

※ Microsoft Docs 참고

https://docs.microsoft.com/ko-kr/sql/t-sql/statements/bulk-insert-transact-sql?view=sql-server-ver15

BULK INSERT
   { database_name.schema_name.table_or_view_name | schema_name.table_or_view_name | table_or_view_name }
      FROM ‘data_file’
     [ WITH
    (
   [ [ , ] BATCHSIZE = batch_size ]
   [ [ , ] CHECK_CONSTRAINTS ]
   [ [ , ] CODEPAGE = { ‘ACP’ | ‘OEM’ | ‘RAW’ | ‘code_page’ } ]
   [ [ , ] DATAFILETYPE =
      { ‘char’ | ‘native’| ‘widechar’ | ‘widenative’ } ]
   [ [ , ] DATA_SOURCE = ‘data_source_name’ ]
   [ [ , ] ERRORFILE = ‘file_name’ ]
   [ [ , ] ERRORFILE_DATA_SOURCE = ‘errorfile_data_source_name’ ]
   [ [ , ] FIRSTROW = first_row ]
   [ [ , ] FIRE_TRIGGERS ]
   [ [ , ] FORMATFILE_DATA_SOURCE = ‘data_source_name’ ]
   [ [ , ] KEEPIDENTITY ]
   [ [ , ] KEEPNULLS ]
   [ [ , ] KILOBYTES_PER_BATCH = kilobytes_per_batch ]
   [ [ , ] LASTROW = last_row ]
   [ [ , ] MAXERRORS = max_errors ]
   [ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,…n ] ) ]
   [ [ , ] ROWS_PER_BATCH = rows_per_batch ]
   [ [ , ] ROWTERMINATOR = ‘row_terminator’ ]
   [ [ , ] TABLOCK ]

   — input file format options
   [ [ , ] FORMAT = ‘CSV’ ]
   [ [ , ] FIELDQUOTE = ‘quote_characters’]
   [ [ , ] FORMATFILE = ‘format_file_path’ ]
   [ [ , ] FIELDTERMINATOR = ‘field_terminator’ ]
   [ [ , ] ROWTERMINATOR = ‘row_terminator’ ]
    )] 


2. 샘플 예제 파일

C:blueshareintFileUser_Info.txt

1001|홍길동1|1|
1002|홍길동2|2|
1003|홍길동3|3|
1004|홍길동4|4|
1005|홍길동5|1|
1006|홍길동6|2|
1007|홍길동7|3|
1008|홍길동8|4|
1009|홍길동9|1|
1010|홍길동10|2|
1011|홍길동11|3|
1012|홍길동12|4|


3. BLUK INSERT 구문을 사용하여 대용량 파일을 테이블에 저장 하기 예제

-- DATAFILETYPE = 'widechar' => 파일형식이 유니코드
-- FIELDTERMINATOR = '|'     => 필드구분자 '|'
-- ROWTERMINATOR = '|n'     => 종결자 '|리턴'
DELETE FROM BS_DEMO_9
BULK INSERT BS_DEMO_9
       FROM 'C:blueshareintFileUser_Info.txt'
       WITH (DATAFILETYPE = 'widechar', FIELDTERMINATOR = '|', ROWTERMINATOR = '|n')
     
-- 데이터 확인
SELECT *
  FROM BS_DEMO_9
BLUK INSERT 구문을 사용하여 대용량 파일을 테이블에 저장 하기 예제


이 글이 도움이 되셨다면 공유를 부탁드립니다. 다음 글에서 뵙겠습니다!

위로 스크롤