次の方法で共有


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

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

  • 作業を開始する準備: 制限事項と制約事項、セキュリティ

  • プロシージャの依存関係を表示するのに使用するもの:  SQL Server Management Studio、Transact-SQL、PowerShell

作業を開始する準備

制限事項と制約事項

[先頭に戻る]

セキュリティ

権限

[先頭に戻る]

  • システム関数: 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

  • Transact-SQL

SQL Server Management Studio の使用

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

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

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

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

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

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

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

[先頭に戻る]

Transact-SQL の使用

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

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

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

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

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

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

      USE AdventureWorks2012;
      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 AdventureWorks2012;
      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 AdventureWorks2012;
      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 AdventureWorks2012;
      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_referencing_entities ('Purchasing.uspVendorAllInfo', 'OBJECT');
      GO
      
  • オブジェクト カタログ ビュー: sys.sql_expression_dependencies
    このビューを使用すると、プロシージャが依存しているオブジェクトまたはプロシージャに依存しているオブジェクトを表示できます。

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

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

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

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

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

        USE AdventureWorks2012;
        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 AdventureWorks2012;
        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 AdventureWorks2012;
        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 AdventureWorks2012;
        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)

概念

ストアド プロシージャの名前の変更