답변 감사합니다!
한번의 트랜잭션에 100개씩 처리한다는 뜻을 잘 이해하지 못하겠습니다..
혹시 설명해주실수 있으신가요?..
그리고
BULK INSERT A테이블 FROM '파일경로' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', BATCHSIZE = 100)
위와 같이 작성후 a테이블에 insert 테스트를 해보려고하는데
대량 로드할 수 없습니다. 파일 "파일경로"이(가) 없거나 파일 액세스 권한이 없습니다.
이렇게 오류가 나네요! 이건 제 db유져에 bulk insert를 할수있는 권한이 없다는 뜻 맞나요??
마지막으로
BEGIN TRY
BULK INSERT A테이블 FROM '파일경로' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', BATCHSIZE = 100)
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH
위와 같이 작성할경우 insert가 하나라도 실패할경우 모두 롤백처리 될까요?
1. 100개씩이란.. 100개의 레코드를 한 번에 전송 및 적재한다는 뜻입니다. 대상 테이블의 잠금을 최소화하기 위해 이 숫자를 100까지 낮출 수 있죠.
2. BULK INSERT 문을 직접 실행한다면 파일은 서버에 올려져 있어야 합니다. 그리고 파일이 들어있는 폴더에 대한 읽기 권한이 MS-SQL 서비스를 실행하고 있는 계정에 부여되어 있어야 합니다. 사실 SSIS를 권해드렸던 것도.. 이 부분 - 권한 설정 - 이 까다로울 때가 있어서입니다. SSIS는 로컬 PC에서 실행되어 원격 서버에 접속하는 방식이기 때문에, 파일의 위치나 권한 문제로부터 자유롭죠.
3. 네, 전체 롤백됩니다만.. 이러면 의미가 없어요. 애초에 대상 테이블에 대한 잠금을 최소화하기 위한 것인데.. 트랜잭션을 걸어버리면 안되죠.