【Data Platform】/⤷ SQL, T-SQL
[2k] 시스템 오브젝트(System Function, Information Schema View)의 생성 및 활용
디비랑
2008. 9. 7. 00:44
- /**********************************************************************************************
-- Title : [2k] 시스템 오브젝트(System Function, Information Schema View)의 생성 및 활용
-- Reference : dba guide
-- Key word : information schema view, sp_ms_upd_sysobj_category,
-- reconfigure with override 시스템 함수 시스템 프로시저 시스템프로시저
**********************************************************************************************/
/*
-- System Function 생성하기
*/
-- 시스템 테이블을 직접 수정할 수 있도록 설정합니다.
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 Northwind
GO
SELECT fn_greatest(989, 998), fn_least(989, 998)
GO
/*
-- Information Schema View 생성하기
*/
-- 사용자가 INFORMATION 스키마 뷰 생성하기
USE master;
GO
-- 사용자의 시스템 테이블의 수정 허용
EXEC sp_configure 'allow updates', 1;
RECONFIGURE WITH OVERRIDE;
GO
-- ??
EXEC sp_MS_upd_sysobj_category 1;
GO
-- 스키마 뷰 생성
CREATE VIEW INFORMATION_SCHEMA.DEFAULT_CONSTRAINTS
AS
SELECT db_name() as CONSTRAINT_CATALOG
, user_name(c_obj.uid) as CONSTRAINT_SCHEMA
, c_obj.name as CONSTRAINT_NAME
, com.text as DEFAULT_CLAUSE
FROM sysobjects c_obj, syscomments com
WHERE c_obj.uid = user_id()
AND c_obj.id = com.id
AND c_obj.xtype = 'D'
GO
-- ??
EXEC sp_MS_upd_sysobj_category 2;
GO
-- 사용자의 시스템 테이블 수정 불가
EXEC sp_configure 'allow updates', 0;
GO
RECONFIGURE WITH OVERRIDE;
GO
-- 생성한 INFORMATION 스키마 뷰 활용하기
USE pubs
GO
SELECT *
FROM INFORMATION_SCHEMA.DEFAULT_CONSTRAINTS
GO