SQL Serverの - 「sys.functions」はありますか?
-
19-08-2019 - |
質問
SQL Server 2005は、私が頻繁に使用するシステムカタログに大きなsys.XXXの景色を眺めることができます。
何を私につまずくことはこれです:なぜあなたのストアドプロシージャに関する情報を参照するには、「sys.procedures」ビューがありますが、あなたの保存された機能のための同じを参照するにはない「sys.functions」ビューがありません。
?誰もが保存された機能を使用しませんか?私は、例えばのためにそれらは非常に便利見つけます計算列とな!
sys.functionsが欠落している具体的な理由がある、またはそれは、SYSカタログ・ビューの中に入れて十分に重要と考えられていなかっただけで何かあります? SQL Server 2008で、それが利用可能である??
乾杯、 マルク
解決
私は、UDFのは非常に便利であり、私はすべての時間それらを使用見つけます。
私はMicrosoftの根拠は、(私の知る限り、またはSQL Server 2008)SQL Server 2005で同等のsys.functions含めない何のためにあるのかわからないんだけど、それはあなた自身を巻くだけ簡単です。
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のWebサイトによると、「情報スキーマビューは、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'
ちなみに、あなたはタイプ= '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')