문제

SQL Server 2005에는 자주 사용하는 시스템 카탈로그에 대한 Sys.xxx보기가 있습니다.

저를 우연히 발견하는 것은 다음과 같습니다. 왜 "sys.procedures"가 저장된 절차에 대한 정보를 보려면보기가 보이지만 "sys.functions"는 저장된 기능에 대해 동일하게 볼 수있는 견해가 없습니까?

저장된 기능을 사용하지 않습니까? 나는 그들이 컴퓨팅 된 열 등에 매우 편리하다고 생각합니다!

Sys.ctions가 누락 된 특정 이유가 있습니까? SQL Server 2008에서 사용할 수 있습니까 ??

건배, 마크

도움이 되었습니까?

해결책

UDF가 매우 편리하고 항상 사용합니다.

SYS.FUNTIONS SQL SERVER 2005 (또는 SQL Server 2008, 내가 알 수있는 한)에 해당하는 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 views를 사용하는 것입니다.

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

Microsoft 웹 사이트에 따르면 "정보 스키마보기는 SQL Server 메타 데이터의 내부 시스템 테이블 독립적보기를 제공합니다. 정보 스키마 뷰는 애플리케이션이 기본 시스템 테이블을 상당히 변경했지만 응용 프로그램이 올바르게 작동 할 수 있도록합니다." 다시 말해, SQL이 업그레이드됨에 따라 기본 시스템 테이블이 변경 될 수 있지만 뷰는 여전히 동일하게 유지되어야합니다.

이것은 기능 한 방울을 스크립트 할 때 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')
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top