반응형
SQL은 기본적으로 선언형 언어지만, 반복 작업이 필요한 경우에는 WHILE
이나 CURSOR
같은 제어문을 사용할 수 있습니다.
이번 포스팅에서는 MSSQL에서 반복문을 처리하는 두 가지 방법,WHILE
루프와 CURSOR
의 사용법을 예제로 쉽게 설명해 드릴게요! 🚀
🧭 1. WHILE 루프 기본 사용법
WHILE
은 일반적인 프로그래밍 언어에서 쓰는 반복문과 유사합니다.
✅ 기본 구조
DECLARE @i INT = 1;
WHILE @i <= 5
BEGIN
PRINT '현재 숫자: ' + CAST(@i AS VARCHAR);
SET @i = @i + 1;
END
🔍 설명
@i
가 5보다 작거나 같은 동안 반복SET
으로 카운터 증가PRINT
또는INSERT
,UPDATE
같은 SQL 명령어로 작업 수행
🛠 실전 예제: 테이블에 1~10까지 숫자 삽입
CREATE TABLE NumberTable (num INT);
GO
DECLARE @i INT = 1;
WHILE @i <= 10
BEGIN
INSERT INTO NumberTable (num) VALUES (@i);
SET @i = @i + 1;
END
💡 반복적으로 INSERT
작업을 하고 싶을 때 유용합니다!
🧭 2. CURSOR로 반복 처리하기
CURSOR
는 테이블의 결과 집합을 한 줄씩 순회하면서 처리할 수 있습니다.
✅ 기본 구조
DECLARE @name NVARCHAR(50);
DECLARE name_cursor CURSOR FOR
SELECT name FROM Employees;
OPEN name_cursor;
FETCH NEXT FROM name_cursor INTO @name;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT '이름: ' + @name;
FETCH NEXT FROM name_cursor INTO @name;
END
CLOSE name_cursor;
DEALLOCATE name_cursor;
🔍 설명
DECLARE CURSOR
로 반복할 대상 쿼리 지정FETCH NEXT
로 한 줄씩 가져오기@@FETCH_STATUS
로 종료 조건 확인- 끝나면
CLOSE
,DEALLOCATE
꼭 해줘야 함!
🛠 실전 예제: 직원 이름 앞에 'Mr.' 붙이기
DECLARE @id INT, @name NVARCHAR(50);
DECLARE emp_cursor CURSOR FOR
SELECT id, name FROM Employees;
OPEN emp_cursor;
FETCH NEXT FROM emp_cursor INTO @id, @name;
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE Employees
SET name = 'Mr. ' + @name
WHERE id = @id;
FETCH NEXT FROM emp_cursor INTO @id, @name;
END
CLOSE emp_cursor;
DEALLOCATE emp_cursor;
📌 특정 조건에 따라 데이터를 하나씩 수정해야 할 때 사용할 수 있어요.
⚖ WHILE vs CURSOR 비교 요약
항목 | WHILE | CURSOR |
---|---|---|
목적 | 단순 반복 작업 | 행 단위 반복 처리 |
성능 | 비교적 빠름 | 느릴 수 있음 |
사용 난이도 | 쉬움 | 다소 복잡 |
유의사항 | 무한루프 주의 | 종료/해제 필수 |
✅ 마무리
WHILE
과 CURSOR
는 작은 단위의 반복 로직에 적합하지만,
데이터 양이 많아질수록 성능 이슈가 발생할 수 있습니다.
가능하면 다음과 같은 방식도 고려해보세요:
- 재귀 CTE
- 윈도우 함수
CROSS APPLY
활용
💡 하지만 여전히 실무에서 WHILE
, CURSOR
는 간단한 반복 처리에 유용한 도구입니다.
정확한 용도와 한계를 알고 활용하면 큰 도움이 됩니다!
반응형
'Programming' 카테고리의 다른 글
🔎 Python에서 조건별로 MSSQL 쿼리 동적 생성하기 (f-string과 SQL Injection 방지법) (0) | 2025.03.26 |
---|---|
📦Python 가상환경(venv) 사용법 + `requirements.txt` 완전정복 (0) | 2025.03.25 |
🗂 Python으로 CSV → MSSQL 대량 업로드 (속도 비교 포함) (0) | 2025.03.24 |
🗂 Python에서 리스트 ↔ 문자열 변환 방법 총정리 (join, split 완전 이해하기) (1) | 2025.03.23 |
🔐MSSQL에서 테이블 잠금(Lock)과 Deadlock 처리법 총정리 (0) | 2025.03.23 |