ユーザー定義関数(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が暗号化されているかどうかに関係なく使用できます。