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 구문을 사용하여 대용량 파일을 테이블에 저장 하기 예제](https://bluesharehub.com/wp-content/uploads/2022/03/img_1-7.png)
![BLUK INSERT 구문을 사용하여 대용량 파일을 테이블에 저장 하기 예제](https://bluesharehub.com/wp-content/uploads/2022/03/img_1-7.png)
이 글이 도움이 되셨다면 공유를 부탁드립니다. 다음 글에서 뵙겠습니다!