sql >> データベース >  >> RDS >> Database

T-SQL UDFがスキーマにバインドされているかどうかを確認する方法(暗号化されている場合でも)

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


    1. SQLServerで削除されたレコードを復元するノウハウ

    2. Pythonでのデータベース接続プールの最良の解決策は何ですか?

    3. SQL Server 2016:ビューデザイナー

    4. MySQLは日付文字列をUnixタイムスタンプに変換します