728x90

MSSQL 사용자 정의 함수(UDF) 생성 및 사용법 – 스칼라 함수부터 테이블 반환 함수까지
SQL Server에서는 자주 사용하는 로직을 사용자 정의 함수(User-Defined Function, UDF)로 만들어 재사용할 수 있습니다.
복잡한 조건 계산, 포맷 처리, 반복되는 쿼리 등을 간결하게 구현할 수 있는 유용한 기능입니다.
1. 사용자 정의 함수 종류
- 스칼라 함수: 단일 값을 반환 (예: 숫자, 문자열)
- 테이블 반환 함수 (TVF)
- 인라인 TVF: 단일 SELECT 문으로 반환
- 멀티 스테이트먼트 TVF: BEGIN...END 안에 복수 로직 포함
2. 스칼라 함수 생성 및 사용
▶ 예제: 나이 계산 함수
CREATE FUNCTION dbo.fn_GetAge (@BirthDate DATE)
RETURNS INT
AS
BEGIN
RETURN DATEDIFF(YEAR, @BirthDate, GETDATE());
END;
▶ 사용 방법
SELECT UserName, dbo.fn_GetAge(BirthDate) AS Age
FROM Users;
→ 사용자의 생년월일을 기준으로 나이를 계산합니다.
3. 인라인 테이블 반환 함수 (Inline Table-Valued Function)
▶ 예제: 특정 금액 이상 주문 조회 함수
CREATE FUNCTION dbo.fn_GetHighOrders (@MinAmount MONEY)
RETURNS TABLE
AS
RETURN (
SELECT OrderId, UserId, TotalAmount
FROM Orders
WHERE TotalAmount >= @MinAmount
);
▶ 사용 방법
SELECT *
FROM dbo.fn_GetHighOrders(50000);
4. 멀티 스테이트먼트 테이블 반환 함수
▶ 예제: 사용자별 최근 주문
CREATE FUNCTION dbo.fn_LatestOrderPerUser()
RETURNS @Result TABLE (
UserId INT,
LastOrderDate DATETIME
)
AS
BEGIN
INSERT INTO @Result
SELECT UserId, MAX(OrderDate)
FROM Orders
GROUP BY UserId;
RETURN;
END;
▶ 사용 방법
SELECT * FROM dbo.fn_LatestOrderPerUser();
5. 함수 삭제 및 수정
- 삭제:
DROP FUNCTION dbo.fn_GetAge; - 수정: 기존 함수를 변경할 땐
ALTER FUNCTION사용
6. 실무 팁 💡
- 스칼라 함수는 행 단위로 호출되므로 대량 데이터에서 성능 저하를 일으킬 수 있습니다.
- 복잡한 집계나 다중 결과 조회는 인라인 TVF로 처리하는 것이 성능에 유리합니다.
- 함수 내부에서는
INSERT, UPDATE등 DML 문장을 사용할 수 없습니다. - 테스트 시 함수 결과를
SELECT dbo.함수명(...)으로 바로 확인 가능해 개발이 편리합니다.
마무리
사용자 정의 함수(UDF)는 반복되는 로직을 재사용하고, 쿼리 가독성과 유지보수성을 높이는 데 매우 유용합니다.
특히 조건 계산, 포맷 처리, 필터링 로직을 공통화할 때 효과적이며, 상황에 맞는 함수 유형을 선택하는 것이 중요합니다.
728x90
'Database > MSSQL' 카테고리의 다른 글
| MSSQL 사용자 계정 생성 및 권한 부여 방법 (0) | 2025.05.29 |
|---|---|
| MSSQL 저장 프로시저(Stored Procedure) 작성 및 실행 방법 (0) | 2025.05.28 |
| MSSQL 수학 함수(SUM, AVG, ROUND 등) 사용 예제 (0) | 2025.05.27 |
| MSSQL 날짜 및 시간 함수(GETDATE, DATEADD 등) 활용법 (0) | 2025.05.26 |
| MSSQL 자주 사용하는 문자열 함수(LEN, SUBSTRING 등) 정리 (0) | 2025.05.25 |