728x90

USE sample
GO

-- 시스템 테이블을 직접 수정할 수 있도록 설정
EXEC sp_configure 'allow updates', 1
RECONFIGURE WITH OVERRIDE
GO

-- 함수는 master 데이타베이스 생성, 소유자는 system_function_schema 지정
USE master
GO

CREATE FUNCTION system_function_schema.fn_greatest ( @x bigint, @y bigint )
 RETURNS bigint
AS
BEGIN
 RETURN ( CASE WHEN @x>@y THEN @x ELSE @y END )
END
GO

CREATE FUNCTION system_function_schema.fn_least( @x bigint, @y bigint )
 RETURNS bigint
AS
BEGIN
 RETURN ( CASE WHEN @x<@y THEN @x ELSE @y END )
END
GO

-- 시스템 테이블을 직접 수정할 수 없도록 0으로 변경(반드시 수행)
EXEC sp_configure 'allow updates', 0
RECONFIGURE WITH OVERRIDE
GO

-- 생성한 시스템 함수는 모든 데이타베이스에서 호출 가능
USE sample
GO

SELECT fn_greatest(989, 998), fn_least(989, 998)
GO

결과
998 989

/* 시스템 함수 조회하기 */
USE master
GO

SELECT name , OBJECTPROPERTY(id, 'IsScalarFunction'),  *
FROM sysobjects
WHERE uid = USER_ID('system_function_schema')
AND (OBJECTPROPERTY(id, 'IsScalarFunction')=1
 OR OBJECTPROPERTY(id, 'IsTableFunction')=1
 OR OBJECTPROPERTY(id, 'IsInlineFunction')=1 )
GO

[출처] 시스템 함수 생성|작성자 주디

+ Recent posts