ストアド プロシージャの依存関係の表示

適用対象:SQL ServerAzure SQL Database Not supported.Azure Synapse Analytics Analytics Platform System (PDW)

このトピックでは、SQL Server Management Studio または Transact-SQL を使用して SQL Server のストアド プロシージャの依存関係を表示する方法について説明します。

始める前に

制限事項と制約事項

セキュリティ

アクセス許可

システム関数: sys.dm_sql_referencing_entities
参照先エンティティに対する CONTROL 権限および sys.dm_sql_referencing_entities に対する SELECT 権限が必要です。 参照先エンティティがパーティション関数である場合、データベースに対する CONTROL 権限が必要です。 既定では、SELECT 権限が public に与えられます。

システム関数: sys.dm_sql_referenced_entities
sys.dm_sql_referenced_entities に対する SELECT 権限および参照元エンティティに対する VIEW DEFINITION 権限が必要です。 既定では、SELECT 権限が public に与えられます。 参照元エンティティがデータベース レベルの DDL トリガーである場合は、データベースに対する VIEW DEFINITION 権限またはデータベースに対する ALTER DATABASE DDL TRIGGER 権限が必要です。 参照元エンティティがサーバー レベルの DDL トリガーである場合は、サーバーに対する VIEW ANY DEFINITION 権限が必要です。

オブジェクト カタログ ビュー: sys.sql_expression_dependencies
データベースに対する VIEW DEFINITION 権限およびデータベースの sys.sql_expression_dependencies に対する SELECT 権限が必要です。 既定では、SELECT 権限は db_owner 固定データベース ロールのメンバーだけに与えられます。 SELECT 権限と VIEW DEFINITION 権限が別のユーザーに与えられている場合、権限が許可されているユーザーはデータベース内のすべての依存関係を表示できます。

ストアド プロシージャの依存関係を表示する方法

次のいずれかを使用します。

SQL Server Management Studio を使用する

オブジェクト エクスプローラーでプロシージャの依存関係を表示するには

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

  2. [データベース]を展開し、プロシージャが属するデータベースを展開し、 [プログラミング]を展開します。

  3. [ストアド プロシージャ]を展開し、プロシージャを右クリックして、 [依存関係の表示]をクリックします。

  4. プロシージャに依存しているオブジェクトの一覧を表示します。

  5. プロシージャが依存しているオブジェクトの一覧を表示します。

  6. OK をクリックします。

Transact-SQL の使用

この記事には AdventureWorks2022 サンプル データベースが必要です。このサンプル データベースは、Microsoft SQL Server サンプルとコミュニティ プロジェクトのホーム ページからダウンロードできます。

クエリ エディターでプロシージャの依存関係を表示するには

システム関数: sys.dm_sql_referencing_entities
この関数は、プロシージャに依存しているオブジェクトを表示するために使用します。

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

  2. [データベース]を展開し、プロシージャが属するデータベースを展開します。

  3. [ファイル] メニューの [新しいクエリ] をクリックします。

  4. 次の例をコピーし、クエリ エディターに貼り付けます。 最初の例では、Adventure Works Cycles データベース内のすべてのベンダーの名前と、そのベンダーが提供する製品、信用格付け、およびベンダーが現時点で製品を提供可能かどうかを返す uspVendorAllInfo プロシージャを作成します。

    USE AdventureWorks2022;  
    GO  
    IF OBJECT_ID ( 'Purchasing.uspVendorAllInfo', 'P' ) IS NOT NULL   
        DROP PROCEDURE Purchasing.uspVendorAllInfo;  
    GO  
    CREATE PROCEDURE Purchasing.uspVendorAllInfo  
    WITH EXECUTE AS CALLER  
    AS  
        SET NOCOUNT ON;  
        SELECT v.Name AS Vendor, p.Name AS 'Product name',   
          v.CreditRating AS 'Rating',   
          v.ActiveFlag AS Availability  
        FROM Purchasing.Vendor v   
        INNER JOIN Purchasing.ProductVendor pv  
          ON v.BusinessEntityID = pv.BusinessEntityID   
        INNER JOIN Production.Product p  
          ON pv.ProductID = p.ProductID   
        ORDER BY v.Name ASC;  
    GO  
    
  5. このプロシージャの作成後、2 番目の例では、sys.dm_sql_referencing_entities 関数を使用して、プロシージャに依存しているオブジェクトを表示します。

    USE AdventureWorks2022;  
    GO  
    SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent  
    FROM sys.dm_sql_referencing_entities ('Purchasing.uspVendorAllInfo', 'OBJECT');   
    GO  
    
    

システム関数: sys.dm_sql_referenced_entities
この関数は、プロシージャが依存しているオブジェクトを表示するために使用します。

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

  2. [データベース]を展開し、プロシージャが属するデータベースを展開します。

  3. [ファイル] メニューの [新しいクエリ] をクリックします。

  4. 次の例をコピーし、クエリ エディターに貼り付けます。 最初の例では、Adventure Works Cycles データベース内のすべてのベンダーの名前と、そのベンダーが提供する製品、信用格付け、およびベンダーが現時点で製品を提供可能かどうかを返す uspVendorAllInfo プロシージャを作成します。

    USE AdventureWorks2022;  
    GO  
    IF OBJECT_ID ( 'Purchasing.uspVendorAllInfo', 'P' ) IS NOT NULL   
        DROP PROCEDURE Purchasing.uspVendorAllInfo;  
    GO  
    CREATE PROCEDURE Purchasing.uspVendorAllInfo  
    WITH EXECUTE AS CALLER  
    AS  
        SET NOCOUNT ON;  
        SELECT v.Name AS Vendor, p.Name AS 'Product name',   
          v.CreditRating AS 'Rating',   
          v.ActiveFlag AS Availability  
        FROM Purchasing.Vendor v   
        INNER JOIN Purchasing.ProductVendor pv  
          ON v.BusinessEntityID = pv.BusinessEntityID   
        INNER JOIN Production.Product p  
          ON pv.ProductID = p.ProductID   
        ORDER BY v.Name ASC;  
    GO  
    
  5. このプロシージャの作成後、2 番目の例では、sys.dm_sql_referenced_entities 関数を使用して、プロシージャが依存しているオブジェクトを表示します。

    USE AdventureWorks2022;  
    GO  
    SELECT referenced_schema_name, referenced_entity_name,  
    referenced_minor_name,referenced_minor_id, referenced_class_desc,  
    is_caller_dependent, is_ambiguous  
    FROM sys.dm_sql_referenced_entities ('Purchasing.uspVendorAllInfo', 'OBJECT');  
    GO  
    

オブジェクト カタログ ビュー: sys.sql_expression_dependencies
このビューを使用すると、プロシージャが依存しているオブジェクトまたはプロシージャに依存しているオブジェクトを表示できます。

プロシージャに依存しているオブジェクトを表示します。

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

  2. [データベース]を展開し、プロシージャが属するデータベースを展開します。

  3. [ファイル] メニューの [新しいクエリ] をクリックします。

  4. 次の例をコピーし、クエリ エディターに貼り付けます。 最初の例では、Adventure Works Cycles データベース内のすべてのベンダーの名前と、そのベンダーが提供する製品、信用格付け、およびベンダーが現時点で製品を提供可能かどうかを返す uspVendorAllInfo プロシージャを作成します。

    USE AdventureWorks2022;  
    GO  
    IF OBJECT_ID ( 'Purchasing.uspVendorAllInfo', 'P' ) IS NOT NULL   
        DROP PROCEDURE Purchasing.uspVendorAllInfo;  
    GO  
    CREATE PROCEDURE Purchasing.uspVendorAllInfo  
    WITH EXECUTE AS CALLER  
    AS  
        SET NOCOUNT ON;  
        SELECT v.Name AS Vendor, p.Name AS 'Product name',   
          v.CreditRating AS 'Rating',   
          v.ActiveFlag AS Availability  
        FROM Purchasing.Vendor v   
        INNER JOIN Purchasing.ProductVendor pv  
          ON v.BusinessEntityID = pv.BusinessEntityID   
        INNER JOIN Production.Product p  
          ON pv.ProductID = p.ProductID   
        ORDER BY v.Name ASC;  
    GO  
    
  5. このプロシージャの作成後、2 番目の例では、sys.sql_expression_dependencies ビューを使用して、プロシージャに依存しているオブジェクトを表示します。

    USE AdventureWorks2022;  
    GO  
    SELECT OBJECT_SCHEMA_NAME ( referencing_id ) AS referencing_schema_name,  
        OBJECT_NAME(referencing_id) AS referencing_entity_name,   
        o.type_desc AS referencing_desciption,   
        COALESCE(COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id,   
        referencing_class_desc, referenced_class_desc,  
        referenced_server_name, referenced_database_name, referenced_schema_name,  
        referenced_entity_name,   
        COALESCE(COL_NAME(referenced_id, referenced_minor_id), '(n/a)') AS referenced_column_name,  
        is_caller_dependent, is_ambiguous  
    FROM sys.sql_expression_dependencies AS sed  
    INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id  
    WHERE referenced_id = OBJECT_ID(N'Purchasing.uspVendorAllInfo')  
    GO  
    

プロシージャが依存しているオブジェクトを表示します。

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

  2. [データベース]を展開し、プロシージャが属するデータベースを展開します。

  3. [ファイル] メニューの [新しいクエリ] をクリックします。

  4. 次の例をコピーし、クエリ エディターに貼り付けます。 最初の例では、Adventure Works Cycles データベース内のすべてのベンダーの名前と、そのベンダーが提供する製品、信用格付け、およびベンダーが現時点で製品を提供可能かどうかを返す uspVendorAllInfo プロシージャを作成します。

    USE AdventureWorks2022;  
    GO  
    IF OBJECT_ID ( 'Purchasing.uspVendorAllInfo', 'P' ) IS NOT NULL   
        DROP PROCEDURE Purchasing.uspVendorAllInfo;  
    GO  
    CREATE PROCEDURE Purchasing.uspVendorAllInfo  
    WITH EXECUTE AS CALLER  
    AS  
        SET NOCOUNT ON;  
        SELECT v.Name AS Vendor, p.Name AS 'Product name',   
          v.CreditRating AS 'Rating',   
          v.ActiveFlag AS Availability  
        FROM Purchasing.Vendor v   
        INNER JOIN Purchasing.ProductVendor pv  
          ON v.BusinessEntityID = pv.BusinessEntityID   
        INNER JOIN Production.Product p  
          ON pv.ProductID = p.ProductID   
        ORDER BY v.Name ASC;  
    GO  
    
  5. このプロシージャの作成後、2 番目の例では、sys.sql_expression_dependencies ビューを使用して、プロシージャが依存しているオブジェクトを表示します。

    USE AdventureWorks2022;  
    GO  
    SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name,   
        o.type_desc AS referencing_desciption,   
        COALESCE(COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id,   
        referencing_class_desc, referenced_class_desc,  
        referenced_server_name, referenced_database_name, referenced_schema_name,  
        referenced_entity_name,   
        COALESCE(COL_NAME(referenced_id, referenced_minor_id), '(n/a)') AS referenced_column_name,  
        is_caller_dependent, is_ambiguous  
    FROM sys.sql_expression_dependencies AS sed  
    INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id  
    WHERE referencing_id = OBJECT_ID(N'Purchasing.uspVendorAllInfo');  
    GO  
    

参照

ストアド プロシージャの名前の変更
sys.dm_sql_referencing_entities (Transact-SQL)
sys.dm_sql_referenced_entities (Transact-SQL)
sys.sql_expression_dependencies (Transact-SQL)