gbmin's Tech Notes

서버 구축 및 유지보수, 클라우드 컴퓨팅, 네트워크 보안, IT 분야 기술 노트. :)

Tech Notes/MSSQL

MSSQL - BULK INSERT(Transact-SQL)/CSV, TXT 대용량 파일 처리

gbmin 2023. 5. 8. 22:22

BULK INSERT(Transact-SQL) 수행을 위한 권한 설정 및 처리방법에 대한 예제

 

1. Bulk Admin 권한

Bulk Admin 권한은 대량의 데이터를 처리하는데 유용한 권한이다. 이 권한이 부여되면 BULK INSERT나 BCP를 사용하여 CSV, TXT 파일 등의 데이터를 대량으로 로드할 수 있으며, PENROWSET(BULK...)로 대량의 데이터를 추출할 수 있다.

또한 UPDATE, INSERT INTO SELECT, DELETE 등의 SQL 명령어를 사용하여 대량의 데이터를 한 번에 변경하거나 삭제할 수 있다.

이러한 작업들은 대량의 데이터를 처리할 때 효율적이다. Bulk Admin 권한은 데이터베이스 관리자나 시스템 관리자에게 효율적인 작업을 수행할 수 있게 하는 유용한 권한이다.

 

사용자 별로 권한을 부여하려면 사용자 로그인 속성에 아래와 같이 권한을 부여할 수 있다.

참고로 대량 작업을 수행하기 위해서는 sysadmin 이 부여되어야 작업이 가능하다.

 

bulkadmin 권한부여

[MSSQL - Server-level roles 참고]

 

서버 수준 역할 - SQL Server

SQL Server는 서버 수준 역할을 제공합니다. 이러한 보안 주체는 다른 보안 주체를 그룹화하여 서버 차원의 사용 권한을 관리합니다.

learn.microsoft.com

 

2. Bulk Insert 예제

BULK INSERT sample_table
FROM 'C:\file\sample_data.csv'
WITH (
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n',
    BATCHSIZE = 1000,
    TABLOCK
);

C:\file\sample_data.csv 파일에서 데이터를 읽어와 sample_table에 대량으로 삽입하는 작업을 수행한다.
FIELDTERMINATOR와 ROWTERMINATOR는 데이터 파일의 필드 구분자와 레코드 구분자를 지정한다.
BATCHSIZE는 삽입할 데이터의 일괄 처리 크기를 지정한다.
TABLOCK은 작업을 수행하는 동안 테이블에 대한 공유 잠금을 설정하여 다른 사용자가 테이블에 접근하는 것을 방지한다.

 

3. Bulk Update 예제

UPDATE sample_table
SET column1 = 'New Value'
FROM sample_table
INNER JOIN (
    SELECT id
    FROM sample_table
    WHERE column2 = 'Condition'
) AS sub
ON sample_table.id = sub.id;

sample_table에서 column2 값이 'Condition'인 레코드에 대해서 column1 값을 'New Value'로 대량으로 변경하는 작업을 수행한다.
INNER JOIN을 사용하여 업데이트 대상 레코드를 선택하고, SET 절에서 변경할 컬럼과 값을 지정한다.