programing

SQL Server - 여기서 "sys" 입니다.기능?"

instargram 2023. 4. 12. 21:44
반응형

SQL Server - 여기서 "sys" 입니다.기능?"

SQL Server 2005는sys.XXX자주 사용하는 시스템 카탈로그의 보기입니다.

나를 당황하게 하는 것은 이것이다: 왜 거기엔sys.procedures저장 프로시저에 대한 정보를 표시하지만, 없습니다.sys.functions저장된 기능에 대해 동일한 보기를 원하십니까?

저장된 기능을 사용하는 사람은 없습니까?계산 컬럼 등에 매우 편리합니다!

특별한 이유가 있나요?sys.functions실종됐나요? 아니면 그냥 중요치 않게 여겨져서sys카탈로그 뷰?SQL Server 2008에서 사용할 수 있습니까?

UDF는 매우 편리하고 항상 사용하고 있습니다.

마이크로소프트가 시스템을 포함하지 않는 이유가 무엇인지 모르겠다.SQL Server 2005(또는 SQL Server 2008)와 동등한 기능을 제공하지만, 사용자 고유의 기능을 쉽게 구현할 수 있습니다.

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'

마이크로소프트 웹 사이트에 따르면 "정보 스키마 뷰는 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'

참고로 유형 = 'FS'를 포함시키고 싶지 않으십니까?

name    type    type_desc
getNewsletterStats  FS  CLR_SCALAR_FUNCTION

이것이 외부 DLL에서 파생된 UDF의 sys.objects 내의 아이템에 대응하는 것입니다.

@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

반응형