본문 바로가기
DataBase/MsSql

MSSQL BULK INSERT 사용법 및 예제

by 아우럼 2024. 4. 28.
반응형

BULK INSERT는 대량의 데이터 파일을 데이터베이스 테이블에 INSERT 할 때 사용합니다.

BULK INSERT 특징

  • BULK INSERT를 하면 TXT, CSV 파일을 테이블에 삽입할 수 있습니다.
  • INSERT 및 ADMINISTER BULK OPERATIONS 권한이 필요합니다.
  • 서식 파일을 BULK INSERT와 함께 사용하면 최대 1024개의 필드까지만 가능합니다.
  • 데이터를 입력할 때 BULK INSERT 문 내에 BATCHSIZE 절을 지정하여 나눠 작업할 수 있습니다.

BULK INSERT 사용법 예제

BULK INSERT 사용법 예제 및 권한.

  • 기본적으로 제약 조건을 사용하지 않습니다. 제약 조건을 확인하려면 CHECK_CONSTRAINTS 옵션을 사용하세요.
  • 테이블에 Trigger가 사용 중이면 FIRE_TRIGGER 옵션을 지정하지 않았습니다.
  • 데이터 파일에서 ID 값을 가져올 때 KEEPIDENTITY 옵션을 사용합니다.

txt 파일을 테이블에 넣기.

  • 텍스트 파일 내용을 테이블에 BULK INSERT 합니다.
  • ROWTERMINATOR는 행 변경인데 기본 행 종결자는 \n(줄 바꿈)입니다.
  • 에러 발생 시는 '0x0a' 변경해 주세요.
-- CREATE TABLE
DROP TABLE IF EXISTS BulkInsertForTxt;
CREATE TABLE BulkInsertForTxt (
	Txt1 varchar(255) NULL,
	Txt2 varchar(255) NULL,
	Txt3 varchar(255) NULL,
	Txt4 varchar(255) NULL
);
 
-- Bulk Insert  
BULK INSERT BulkInsertForTxt 
FROM 'D:\BULK_INSERT_FILE\TEXTFILE.txt'
  WITH
    (
     FIELDTERMINATOR = '|'
    ,ROWTERMINATOR = '\n'	
    -- ,ROWTERMINATOR =  '0x0a'		 
    -- , FIRSTROW = 2
    -- ,LASTROW  =3    
    -- , BATCHSIZE =2
   );
		  
-- data check.
SELECT * 
FROM BulkInsertForTxt;

Bulk Insert 흐름도 입니다.
Bulk Insert 흐름도.

CSV 파일을 테이블에 넣기.

  • CSV 파일도 테이블에 BULK INSERT 할 수 있습니다.
-- CREATE TABLE
DROP TABLE IF EXISTS BulkInsertForCSV;
CREATE TABLE BulkInsertForCSV (
    CSV1 varchar(255) NULL,
    CSV2 varchar(255) NULL,
    CSV3 varchar(255) NULL,
    CSV4 varchar(255) NULL
);

-- Bulk Insert 
BULK INSERT BulkInsertForCSV 
FROM 'D:\BULK_INSERT_FILE\CSVBULKINSERT.csv'
WITH ( FORMAT = 'CSV'
     -- , FIRSTROW = 2
     -- ,LASTROW  =3    
     -- , BATCHSIZE =2
    , FIELDTERMINATOR = ','
    , ROWTERMINATOR = '0x0a'	  
   );
	  
 SELECT * 
 FROM BulkInsertForCSV

BULK INSERT 에러

BULK INSERT 에러 발생 시.

  • BULK INSERT 에러 발생 시.
  • Msg 4832, Level 16, State 1, Line 13.
  • 대량 로드: 데이터 파일에서 예기치 않은 파일 끝에 도달했습니다.
  • Msg 7399, Level 16, State 1, Line 13.
  • 연결된 서버 "(null)"의 OLE DB 공급자 "BULK"에 오류가 발생했습니다. 공급자에서 오류에 관한 정보를 주지 않았습니다.
  • Msg 7330, Level 16, State 2, Line 13.
  • 연결된 서버 "(null)"의 OLE DB 공급자 "BULK"에서 행을 인출할 수 없습니다.
  • 소스를 복사하여 실행해 주세요.
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;

EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;

EXEC SP_CONFIGURE 'Agent XPs', 1;
RECONFIGURE;

한국어 data 잘못된 경우.

  • CODEPAGE에서 한국어가 깨지면 65001로 설정해 주세요.

반응형