728x90
대량의 데이터를 한번에 INSERT 하게 되면 LOCK 이 발생하게 됩니다.
이를 방지하는 방법은 10000개의 데이터를 한번에 INSERT 하지 않고 1000개씩 나눠서 INSERT 하는 방법입니다.
이제 아래에서 대규모 일괄 처리 작업을 여러 개의 작은 작업으로 분할하는 방법에 대해서 알아보겠습니다.
1.테이블 생성
2개의 테이블일 생성해 줍니다.
create table number_test1
(
num1 int
)
create table number_test2
(
num1 int
)
2.데이터 삽입(number_test1)
number_test1 테이블에 1~10000개의 숫자를 INSERT 합니다.
SET NOCOUNT ON;
DECLARE @i INT = 1
WHILE @i <= 10000
BEGIN
INSERT INTO number_test1 values (@i) SET @i += 1
END
select count(*) From number_test1
3.데이터 업데이트(number_test1 -> number_test2)
number_test1 테이블에는 현재 10,000개의 데이터가 있습니다. 이 데이터를 1,000개씩 나눠서
number_test2에 INSERT 하는 방법입니다.
DECLARE@insert INT,
@counter INT,
@batch INT
--DECLARE @temp TABLE(productid INT)
SET @counter = 1
SET @insert = (SELECT count(num1) FROM number_test1)
SET @batch = @insert/1000 WHILE(@counter <= @batch)
begin IF(@insert >1000)
begin
INSERT INTO number_test2 SELECT num1 FROM number_test1 ORDER BY num1 offset (@counter - 1) * 1000 rows
FETCH next 1000 rows only
end
SET @counter = @counter + 1 end
SELECT count(1)AS row_count FROM number_test2
<참고사이트>
https://www.quora.com/How-can-I-insert-1000-rows-in-SQL-at-a-time
반응형
그리드형
'IT > MSSQL' 카테고리의 다른 글
[MSSQL] 데드락(교착상태) 테스트 예제 (1) | 2023.11.18 |
---|---|
[MSSQL] 복사전용백업(COPY ONLY BACKUP) 실행방법 및 개념설명 (1) | 2023.11.18 |
[MSSQL] MAX함수 SELECT절 가공 시 인덱스를 사용할까? (0) | 2023.08.13 |
[MSSQL] SELECT 쿼리 복사 후 자동 정렬(SSMS 개행문자 옵션 설정) (0) | 2023.08.13 |
[MSSQL] 프로시저(SP) 생성시간 및 수정시간 확인방법 (0) | 2023.08.13 |
댓글