ユーザー定義関数(UDF)などのオブジェクトをバインドするスキーマは、関数を誤って壊す可能性のある、参照するオブジェクトに変更が加えられるのを防ぐため、良い習慣と見なされます。
作成時にユーザー定義関数をスキーマバインドすることも、後で変更することもできます。
通常、UDFがSQL Serverでスキーマにバインドされているかどうかは、その定義を表示することで確認できます。通常、これはGUIを介して、「ScriptasCreate」などを選択することで実行できます。
definition
を選択して、T-SQLを使用してこれを行うこともできます。 sys.sql_modules
の列 システムカタログビュー。
ただし、これはUDFが暗号化されていない場合にのみ機能します。
ただし、sys.sql_modules
には別の列があります UDFが暗号化されているかどうかに関係なく、目的にかなうビュー:is_schema_bound
例1-暗号化されたUDF
これは、udf_CatsByName_ITVF
と呼ばれる暗号化されたユーザー定義関数かどうかを調べる例です。 スキーマにバインドされているかどうか。
SELECT definition, is_schema_bound FROM sys.sql_modules WHERE object_id = OBJECT_ID('udf_CatsByName_ITVF');
結果:
+--------------+-------------------+ | definition | is_schema_bound | |--------------+-------------------| | NULL | 1 | +--------------+-------------------+
この場合、UDFはスキーマにバインドされています。
definition
にも注意してください 関数に暗号化が適用されているため、columnはNULLを返します。
例2–暗号化なしのUDF
暗号化が適用されていなかった場合、その列に完全な定義が表示され、WITH SCHEMABINDING
という引数が表示されたはずです。 定義で。
関数が暗号化されていない場合のクエリをもう一度示します。
SELECT definition FROM sys.sql_modules WHERE object_id = OBJECT_ID('udf_CatsByName_ITVF');
結果:
+--------------+ | definition | |--------------| | CREATE FUNCTION dbo.udf_CatsByName_ITVF( @CatName varchar(70) ) RETURNS TABLE WITH SCHEMABINDING AS RETURN ( SELECT CatId, CatName, Phone FROM dbo.Cats WHERE CatName = @CatName ); | +--------------+
is_schema_bound
を削除しました 読みやすくするためのクエリの列。
いずれにせよ、is_schema_bound
列は、UDFが暗号化されているかどうかに関係なく使用できます。