Programing

SQL Server- "sys.functions"는 어디에 있습니까?

lottogame 2020. 8. 23. 09:40
반응형

SQL Server- "sys.functions"는 어디에 있습니까?


SQL Server 2005에는 자주 사용하는 시스템 카탈로그에 대한 훌륭한 sys.XXX 뷰가 있습니다.

나를 비틀 거리게하는 것은 이것이다 : 왜 저장 프로 시저에 대한 정보를 볼 수있는 "sys.procedures"뷰가 있지만 저장 함수에 대해 동일한 내용을 볼 수있는 "sys.functions"뷰가없는 이유는 무엇입니까?

아무도 저장된 기능을 사용하지 않습니까? 예를 들어 계산 된 열 등에 매우 편리합니다!

sys.functions가 누락 된 특정 이유가 있습니까, 아니면 sys 카탈로그 뷰에 넣을만큼 중요하지 않은 것으로 간주 된 것입니까 ?? SQL Server 2008에서 사용할 수 있습니까 ??

건배, 마크


저는 UDF가 매우 편리하다는 것을 알고 항상 사용합니다.

SQL Server 2005 (또는 SQL Server 2008, 내가 말할 수있는 한)에 해당하는 sys.functions를 포함하지 않은 Microsoft의 이론적 근거는 확실하지 않지만 직접 롤링하는 것은 쉽습니다.

CREATE VIEW my_sys_functions_equivalent
AS
SELECT *
FROM sys.objects
WHERE type IN ('FN', 'IF', 'TF')  -- scalar, inline table-valued, table-valued

함수를 나열하는 또 다른 방법은 INFORMATION_SCHEMA 뷰를 사용하는 것입니다.

SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION'

Microsoft 웹 사이트에 따르면 "정보 스키마 뷰는 SQL Server 메타 데이터에 대한 내부 시스템 테이블 독립적 뷰를 제공합니다. 정보 스키마 뷰를 사용하면 기본 시스템 테이블이 크게 변경 되었더라도 응용 프로그램이 올바르게 작동 할 수 있습니다." 즉, 기본 시스템 테이블은 SQL이 업그레이드됨에 따라 변경 될 수 있지만 뷰는 여전히 동일하게 유지되어야합니다.


이것은 함수의 DROP을 스크립팅 할 때 SSMS가 생성하는 것에 따라 2008 R2에서 유효합니다.

SELECT  *
FROM    sys.objects
WHERE   type IN (N'FN', N'IF', N'TF', N'FS', N'FT') ;

/*
From http://msdn.microsoft.com/en-us/library/ms177596.aspx:
 FN SQL_SCALAR_FUNCTION
 FS Assembly (CLR) scalar-function
 FT Assembly (CLR) table-valued function
 IF SQL_INLINE_TABLE_VALUED_FUNCTION
 TF SQL_TABLE_VALUED_FUNCTION
*/

매우 약간 더 장황하지만 정확히 동일한 작업을 수행해야합니다.

select * from sys.objects where (type='TF' or type='FN')

내가 볼 수있는 한 SQL Server 2008에도 없습니다.


이것은 새로운 것을 추가하지 않지만 다음을 기억하기가 더 쉽다는 것을 알았습니다.

select * from sys.objects where type_desc like '%fun%'

이 시도 :

SELECT * FROM sys.objects
where type_desc = 'SQL_SCALAR_FUNCTION'

부수적으로 type = 'FS'를 포함하고 싶지 않습니까?

name    type    type_desc
getNewsletterStats  FS  CLR_SCALAR_FUNCTION

이것이 sys.objects의 항목이 외부 DLL에서 파생 된 UDF에 해당하는 항목입니다.


@LukeH의 답변을 확장하려면 함수 정의도 반환하려면 sys.sql_modules테이블에 대한 조인이 필요 합니다. 따라서 이에 대한 쿼리는 다음과 같습니다.

SELECT O.name as 'Function name', M.definition as 'Definition', O.object_id
FROM sys.objects as O INNER JOIN sys.sql_modules as M
    ON O.object_id = M.object_id
WHERE type IN ('FN', 'IF', 'TF')  -- scalar, inline table-valued, table-valued

위는 함수 이름, 정의 및 개체 식별자를 각각 표시합니다.


소유자 및 반환 유형을 포함한 스칼라 함수에 대한 자세한 설명은 다음과 같습니다.

SELECT f.name, s.name AS owner, t.name as dataType, p.max_length, p.precision, p.scale, m.definition
FROM sys.objects f
JOIN sys.schemas s on s.schema_id = f.schema_id
JOIN sys.parameters p on p.object_id = f.object_id AND p.parameter_id = 0
JOIN sys.types t ON t.system_type_id = p.system_type_id 
JOIN sys.sql_modules as m ON m.object_id = f.object_id
WHERE type='FN';

SQL 2000 개체 이름에 대한 구체적이고 약간의 조정 :

SELECT *
FROM sysobjects
WHERE type IN ('FN', 'IF', 'TF')

또는

SELECT *
FROM dbo.sysobjects
WHERE type IN ('FN', 'IF', 'TF')

참고 URL : https://stackoverflow.com/questions/468672/sql-server-where-is-sys-functions

반응형