MSSQL CURSOR란 무엇인가?
MSSQL CURSOR는 결과 집합(Result Set)의 행(Row)을 한 번에 하나씩 처리할 수 있도록 해주는 데이터베이스 객체입니다. 일반적인 SQL은 집합 단위로 데이터를 처리하지만, CURSOR를 사용하면 각 행을 순차적으로 가져와 로직을 적용할 수 있습니다. 주로 반복적인 처리나 조건별 업데이트 작업에 활용됩니다.
[MSSQL] SELECT 문 사용법 및 예제
MSSQL에서 테이블의 존재하는 데이터를 조회(검색)를 하기 위해서는 SELECT 명령어를 사용해야 합니다. 이번에는 기본적인 MSSQL SELECT 문의 사용법에 대하여 알아보고 간단한 예제도 다뤄보도록 하
chragu.com
MSSQL CURSOR 기본 사용법
CURSOR는 다음과 같은 단계로 사용합니다.
- DECLARE CURSOR : 사용할 CURSOR를 선언합니다.
- OPEN CURSOR : CURSOR를 열어 결과 집합을 메모리에 로드합니다.
- FETCH NEXT : 한 행씩 데이터를 가져옵니다.
- CLOSE CURSOR : CURSOR를 닫아 결과 집합을 해제합니다.
- DEALLOCATE CURSOR : CURSOR를 완전히 삭제합니다.
1. 기본 문법 예제
DECLARE cursor_name CURSOR FOR
SELECT column1, column2
FROM TableName
WHERE 조건;
OPEN cursor_name;
FETCH NEXT FROM cursor_name;
-- 반복 처리
WHILE @@FETCH_STATUS = 0
BEGIN
-- 처리 로직 작성
FETCH NEXT FROM cursor_name;
END
CLOSE cursor_name;
DEALLOCATE cursor_name;
[MSSQL] INSERT 문 사용법 및 예제 (+ 여러개 레코드 추가)
지난 시간에는 MSSQL SELECT 문을 통한 데이터 조회하는 방법에 대하여 알아보았고, 이번 시간에는 MSSQL에 데이터를 삽입(추가) 하기 위한 INSERT 문의 사용법을 알아보고 간단한 예제도 다뤄보도록
chragu.com
2. CURSOR 예제 코드
1. 단순 조회 예제
DECLARE @UserId INT, @UserName NVARCHAR(50);
DECLARE UserCursor CURSOR FOR
SELECT Id, Name FROM Users;
OPEN UserCursor;
FETCH NEXT FROM UserCursor INTO @UserId, @UserName;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT '사용자: ' + CAST(@UserId AS VARCHAR) + ' - ' + @UserName;
FETCH NEXT FROM UserCursor INTO @UserId, @UserName;
END
CLOSE UserCursor;
DEALLOCATE UserCursor;
2. UPDATE 반복 처리 예제
DECLARE @OrderId INT, @Amount DECIMAL(10,2);
DECLARE OrderCursor CURSOR FOR
SELECT OrderId, Amount FROM Orders WHERE Status = 'Pending';
OPEN OrderCursor;
FETCH NEXT FROM OrderCursor INTO @OrderId, @Amount;
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE Orders
SET Status = 'Completed',
UpdatedAt = GETDATE()
WHERE OrderId = @OrderId;
PRINT '처리 완료: ' + CAST(@OrderId AS VARCHAR);
FETCH NEXT FROM OrderCursor INTO @OrderId, @Amount;
END
CLOSE OrderCursor;
DEALLOCATE OrderCursor;
3. 조건문과 함께 사용하는 예제
DECLARE @ProductId INT, @Stock INT;
DECLARE ProductCursor CURSOR FOR
SELECT ProductId, Stock FROM Products;
OPEN ProductCursor;
FETCH NEXT FROM ProductCursor INTO @ProductId, @Stock;
WHILE @@FETCH_STATUS = 0
BEGIN
IF @Stock < 10
PRINT '재고 부족 상품: ' + CAST(@ProductId AS VARCHAR);
ELSE
PRINT '재고 충분 상품: ' + CAST(@ProductId AS VARCHAR);
FETCH NEXT FROM ProductCursor INTO @ProductId, @Stock;
END
CLOSE ProductCursor;
DEALLOCATE ProductCursor;
CURSOR 사용 시 주의할 점
- CURSOR는 성능 저하를 일으킬 수 있으므로 꼭 필요한 경우에만 사용합니다.
- 대량 데이터 처리에는 **집합 기반 쿼리(JOIN, CTE, WHILE)**가 더 효율적입니다.
- 사용 후 반드시 CLOSE와 DEALLOCATE를 수행해야 메모리 누수를 방지할 수 있습니다.
MySQL UPDATE 문 조건에 맞는 여러 개의 데이터 변경 방법
MySQL UPDATE 문은 데이터베이스(Database)에서 데이터를 수정할 때 사용하는 쿼리(Query)문 입니다. 기본적으로 변경할 컬럼들을 선택하여 모든 레코드를 수정할 수 있지만 조건절(WHERE)에 맞는 레코드
chragu.com
MSSQL CURSOR는 데이터 행을 개별적으로 처리할 때 유용한 기능이지만, 잘못 사용하면 성능 문제가 발생할 수 있습니다. 기본 문법과 실무 예제를 이해하고, 가능하다면 집합 기반 쿼리로 대체하는 것이 좋습니다.
구분 | 설명 |
CURSOR 장점 | 행 단위 처리 가능 |
CURSOR 단점 | 성능 저하, 복잡성 |
대안 | JOIN, WHILE, CTE |
참조하기 좋은 글
● Microsoft 공식 문서 → https://learn.microsoft.com/ko-kr/sql/t-sql/language-elements/cursors-transact-sql
● SQLServerTutorial → https://www.sqlservertutorial.net/sql-server-stored-procedures/sql-server-cursor/
'DataBase > MSSQL' 카테고리의 다른 글
[MSSQL] 데이터 값이 NULL일 때 0으로 표시 (ISNULL 함수를 통한 NULL 체크) (0) | 2024.05.29 |
---|---|
[MSSQL] DELETE(삭제) 문 사용법 및 예제 (0) | 2024.04.16 |
MSSQL UPDATE 사용법 및 예제 (0) | 2024.02.29 |
[MSSQL] INSERT INTO SELECT 문 (조회된 결과를 삽입) (0) | 2023.11.14 |
[MSSQL] INSERT 문 사용법 및 예제 (+ 여러개 레코드 추가) (0) | 2023.11.13 |
댓글