프로그래밍 언어의 함수처럼 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)