Programming

🔁 MSSQL에서 반복문 처리하기: WHILE vs CURSOR 기초 정리

quantoasis 2025. 3. 24. 13:45
반응형

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
목적 단순 반복 작업 행 단위 반복 처리
성능 비교적 빠름 느릴 수 있음
사용 난이도 쉬움 다소 복잡
유의사항 무한루프 주의 종료/해제 필수

✅ 마무리

WHILECURSOR작은 단위의 반복 로직에 적합하지만,
데이터 양이 많아질수록 성능 이슈가 발생할 수 있습니다.

가능하면 다음과 같은 방식도 고려해보세요:

  • 재귀 CTE
  • 윈도우 함수
  • CROSS APPLY 활용

💡 하지만 여전히 실무에서 WHILE, CURSOR는 간단한 반복 처리에 유용한 도구입니다.
정확한 용도와 한계를 알고 활용하면 큰 도움이 됩니다!


반응형