사용자 정의 함수 기본 사항
프로그래밍 언어의 함수처럼 Microsoft SQL Server 2005 사용자 정의 함수는 매개 변수를 받아들이고 복잡한 계산과 같은 작업을 수행하며 해당 작업의 결과를 값으로 반환합니다. 반환 값은 단일 스칼라 값이나 결과 집합일 수 있습니다.
사용자 정의 함수의 이점
SQL Server에서 사용자 정의 함수를 사용하여 얻을 수 있는 이점은 다음과 같습니다.
- 모듈별 프로그래밍을 허용합니다.
함수를 한 번 만들어 데이터베이스에 저장한 후에는 프로그램에서 여러 번 호출할 수 있습니다. 사용자 정의 함수는 프로그램 원본 코드에 관계없이 수정할 수 있습니다. - 작업을 더 빨리 실행할 수 있습니다.
저장 프로시저와 마찬가지로 Transact-SQL 사용자 정의 함수는 계획을 캐시하고 반복 실행에 다시 사용함으로써 Transact-SQL 코드의 컴파일 비용을 줄입니다. 즉, 사용자 정의 함수를 매번 다시 구문 분석하고 최적화할 필요가 없기 때문에 더 빨리 실행할 수 있습니다.
CLR 함수는 계산 작업, 문자열 조작 및 비즈니스 논리 면에서 Transact-SQL 함수보다 더 뛰어난 성공을 제공합니다. Transact-SQL 함수는 데이터를 많이 액세스하는 논리에 더 적합합니다. - 네트워크 트래픽을 줄일 수 있습니다.
단일 스칼라 식으로 표현할 수 없는 일부 복잡한 제약 조건을 기반으로 데이터를 필터링하는 작업을 함수로 표현할 수 있습니다. 그런 다음 WHERE 절에서 이 함수를 호출하여 클라이언트에 전송되는 행 수를 줄일 수 있습니다.
사용자 정의 함수의 구성 요소
SQL Server 2005에서는 사용자 정의 함수를 Transact-SQL로 또는 .NET 프로그래밍 언어로 작성할 수 있습니다. 함수에 .NET 언어를 사용하는 방법은 CLR User-Defined Functions를 참조하십시오.
모든 사용자 정의 함수는 헤더와 본문이라는 두 부분으로 된 동일한 구조로 되어 있습니다. 함수는 0개 이상의 입력 매개 변수를 사용하고 스칼라 값 또는 테이블을 반환합니다.
헤더에서는 다음을 정의합니다.
- 함수 이름(스키마/소유자 이름은 선택 사항)
- 입력 매개 변수 이름 및 데이터 형식
- 입력 매개 변수에 적용할 수 있는 옵션
- 반환 매개 변수 데이터 형식(이름은 선택 사항)
- 반환 매개 변수에 적용할 수 있는 옵션
본문에서는 작업, 논리, 수행할 함수를 정의하며 다음 중 하나가 포함됩니다.
- 함수 논리를 수행하는 하나 이상의 Transact-SQL 문
- .NET 어셈블리에 대한 참조
다음 예에서는 간단한 Transact-SQL 사용자 정의 함수를 보여 주고 함수의 주요 구성 요소를 식별합니다. 함수는 제공된 날짜를 평가하고 주 중에 해당 날짜의 배치가 지정된 값을 반환합니다.
IF OBJECT_ID(N'dbo.GetWeekDay', N'FN') IS NOT NULL
DROP FUNCTION dbo.GetWeekDay;
GO
CREATE FUNCTION dbo.GetWeekDay -- function name
(@Date datetime) -- input parameter name and data type
RETURNS int -- return parameter data type
AS
BEGIN -- begin body definition
RETURN DATEPART (weekday, @Date) -- action performed
END;
GO
다음 예에서는 Transact-SQL 문에 사용된 함수를 보여 줍니다.
SELECT dbo.GetWeekDay(CONVERT(DATETIME,'20020201',101)) AS DayOfWeek;
GO
결과 집합은 다음과 같습니다.
DayOfWeek
---------
6
(1 row(s) affected)