ユーザー定義関数の表示

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

SQL Server のユーザー定義関数の定義またはプロパティに関する情報は、SQL Server Management Studio または Transact-SQL を使用して取得できます。 関数のデータが元のテーブルからどのように抽出されているのかを理解したり、関数で定義されているデータを確認するために、関数の定義を調べたい場合があります。

関数から参照しているオブジェクトの名前を変更する場合は、関数のテキストに新しいオブジェクト名が反映されるように関数を変更する必要があります。 したがって、オブジェクトの名前を変更する前に、まずオブジェクトの依存関係を表示して、オブジェクト名の変更により影響を受ける関数があるかどうかを確認してください。

アクセス許可

sys.sql_expression_dependencies を使用して関数のすべての依存関係を見つけるには、データベースに対する VIEW DEFINITION 権限とデータベースの sys.sql_expression_dependencies に対する SELECT 権限が必要です。 OBJECT_DEFINITION で返されるようなシステム オブジェクトの定義は公開されます。

SQL Server Management Studio の使用 [SQL Server]

ユーザー定義関数のプロパティを表示する

  1. オブジェクト エクスプローラーで、プロパティを表示する関数を含むデータベースの横にあるプラス記号を選択します。次に、プラス記号を選択して [プログラミング] フォルダーを展開します。

  2. プラス記号を選択して [関数] フォルダーを展開します。

  3. プロパティを表示する関数を含むフォルダーをプラス記号を選択して展開します。

    • Table-valued Function
    • スカラー値関数
    • 集計関数
  4. プロパティを表示する関数を右クリックし、 [プロパティ]を選択します。

    [関数のプロパティ - function_name] ダイアログ ボックスに、次のプロパティが表示されます。

    関数名 説明
    データベース この関数を含むデータベースの名前です。
    [サーバー] 現在のサーバー インスタンスの名前です。
    User この接続のユーザーの名前です。
    作成日 関数が作成された日付を表示します。
    [実行時の権限] 関数の実行コンテキストです。
    名前 現在の関数の名前です。
    スキーマ 関数を所有するスキーマを表示します。
    System オブジェクト 関数がシステム オブジェクトかどうかを指定します。 値は TrueFalse です。
    [ANSI NULL] オブジェクトが ANSI NULL オプションで作成されたかどうかを指定します。
    暗号化 関数が暗号化されているかどうかを指定します。 値は TrueFalse です。
    [関数の種類] ユーザー定義関数の種類です。
    [引用符で囲まれた識別子] オブジェクトが引用符で囲まれた識別子オプションで作成されたかどうかを指定します。
    [スキーマ バインド] 関数がスキーマ バインドされているかどうかを指定します。 値は True と False です。 スキーマ バインド関数の詳細については、「CREATE FUNCTION (Transact-SQL)」の SCHEMABINDING のセクションを参照してください。

Transact-SQL の使用

関数の定義およびプロパティを取得する

  1. オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続します。

  2. 標準バーで、 [新しいクエリ] を選択します。

  3. 次のいずれかの例をコピーしてクエリ ウィンドウに貼り付け、[実行]を選択します。

    次のコード サンプルでは、関数名、定義、および関連するプロパティを取得します。

    USE AdventureWorks2022;
    GO
    -- Get the function name, definition, and relevant properties
    SELECT sm.object_id,
       OBJECT_NAME(sm.object_id) AS object_name,
       o.type,
       o.type_desc,
       sm.definition,
       sm.uses_ansi_nulls,
       sm.uses_quoted_identifier,
       sm.is_schema_bound,
       sm.execute_as_principal_id
    -- using the two system tables sys.sql_modules and sys.objects
    FROM sys.sql_modules AS sm
    JOIN sys.objects AS o ON sm.object_id = o.object_id
    -- from the function 'dbo.ufnGetProductDealerPrice'
    WHERE sm.object_id = OBJECT_ID('dbo.ufnGetProductDealerPrice')
    ORDER BY o.type;
    GO
    

    次のコード サンプルでは、関数例 dbo.ufnGetProductDealerPrice の定義を取得します。

    USE AdventureWorks2022;
    GO
    -- Get the definition of the function dbo.ufnGetProductDealerPrice
    SELECT OBJECT_DEFINITION (OBJECT_ID('dbo.ufnGetProductDealerPrice')) AS ObjectDefinition;
    GO
    

詳細については、「sys.sql_modules (Transact-SQL)」および「OBJECT_DEFINITION (Transact-SQL)」を参照してください。

関数の依存関係を取得する

  1. オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続します。

  2. 標準バーで、 [新しいクエリ] を選択します。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] を選択します。

    USE AdventureWorks2022;
    GO
    -- Get all of the dependency information
    SELECT OBJECT_NAME(sed.referencing_id) AS referencing_entity_name,
        o.type_desc AS referencing_desciption,
        COALESCE(COL_NAME(sed.referencing_id, sed.referencing_minor_id), '(n/a)') AS referencing_minor_id,
        sed.referencing_class_desc, sed.referenced_class_desc,
        sed.referenced_server_name, sed.referenced_database_name, sed.referenced_schema_name,
        sed.referenced_entity_name,
        COALESCE(COL_NAME(sed.referenced_id, sed.referenced_minor_id), '(n/a)') AS referenced_column_name,
        sed.is_caller_dependent, sed.is_ambiguous
    -- from the two system tables sys.sql_expression_dependencies and sys.object
    FROM sys.sql_expression_dependencies AS sed
    INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id
    -- on the function dbo.ufnGetProductDealerPrice
    WHERE sed.referencing_id = OBJECT_ID('dbo.ufnGetProductDealerPrice');
    GO
    

詳細については、「sys.sql_expression_dependencies (Transact-SQL)」および「sys.objects (Transact-SQL)」を参照してください。