Anzeigen der Abhängigkeiten einer gespeicherten Prozedur

Gilt für: SQL Server Azure SQL-Datenbank Nicht unterstützt. Azure Synapse Analytics Analytics Platform System (PDW)

In diesem Artikel wird beschrieben, wie Sie die Abhängigkeiten einer gespeicherte Prozedur in SQL Server mithilfe von SQL Server Management Studio oder Transact-SQL anzeigen können.

Vorbereitungen

Einschränkungen

Sicherheit

Berechtigungen

Systemfunktion: dm_sql_referencing_entities
Erfordert die CONTROL-Berechtigung für die Entität, auf die verwiesen wird, und die SELECT-Berechtigung für sys.dm_sql_referencing_entities. Wenn es sich bei der Entität, auf die verwiesen wird, um eine Partitionsfunktion handelt, ist die CONTROL-Berechtigung für die Datenbank erforderlich. Standardmäßig wird die SELECT-Berechtigung der public-Rolle erteilt.

Systemfunktion: dm_sql_referenced_entities
Erfordert die SELECT-Berechtigung für sys.dm_sql_referenced_entities und die VIEW DEFINITION-Berechtigung für die verweisende Entität. Standardmäßig wird die SELECT-Berechtigung der public-Rolle erteilt. Erfordert die Berechtigung VIEW DEFINITION oder ALTER DATABASE DDL TRIGGER für die Datenbank, wenn es sich bei der verweisenden Entität um einen DDL-Trigger auf Datenbankebene handelt. Erfordert die VIEW ANY DEFINITION-Berechtigung für den Server, wenn es sich bei der verweisenden Entität um einen DDL-Trigger auf Serverebene handelt.

Objektkatalogsicht: sql_expression_dependencies
Erfordert die VIEW DEFINITION-Berechtigung für die Datenbank und die SELECT-Berechtigung für sys.sql_expression_dependencies für die Datenbank. Standardmäßig wird die SELECT-Berechtigung nur Mitgliedern der festen Datenbankrolle db_owner gewährt. Wenn einem anderen Benutzer die SELECT-Berechtigung und die VIEW DEFINITION-Berechtigung erteilt werden, kann dieser Berechtigte alle Abhängigkeiten in der Datenbank anzeigen.

So zeigen Sie die Abhängigkeiten einer gespeicherten Prozedur an

Sie können eine der folgenden Anwendungen verwenden:

Verwendung von SQL Server Management Studio

So zeigen Sie die Abhängigkeiten von einer Prozedur im Objekt-Explorer an

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Instanz der Datenbank-Engine her, und erweitern Sie dann diese Instanz.

  2. Erweitern Sie Datenbanken, erweitern Sie die Datenbank, zu der die Prozedur gehört, und erweitern Sie dann Programmierbarkeit.

  3. Erweitern Sie Gespeicherte Prozeduren, klicken Sie mit der rechten Maustaste auf die Prozedur, und klicken Sie dann auf Abhängigkeiten anzeigen.

  4. Zeigen Sie die Liste der Objekte an, die von der Prozedur abhängig sind.

  5. Zeigen Sie die Liste der Objekte an, von denen die Prozedur abhängig ist.

  6. Klicken Sie auf OK.

Verwenden von Transact-SQL

Die Transact-SQL-Codebeispiele in diesem Artikel verwenden die AdventureWorks2022- oder AdventureWorksDW2022-Beispieldatenbank, die Sie von der Homepage Microsoft SQL Server Samples and Community Projects herunterladen können.

So zeigen Sie die Abhängigkeiten einer Prozedur im Abfrage-Editor an

Systemfunktion: dm_sql_referencing_entities
Diese Funktion dient zum Anzeigen der Objekte, die von einer Prozedur abhängen.

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Instanz der Datenbank-Engine her, und erweitern Sie dann diese Instanz.

  2. Erweitern Sie Datenbanken, und erweitern Sie die Datenbank, der die Prozedur angehört.

  3. Klicken Sie im Menü Datei auf Neue Abfrage .

  4. Kopieren Sie die folgenden Beispiele, und fügen Sie sie in den Abfrage-Editor ein. Im ersten Beispiel wird die uspVendorAllInfo-Prozedur erstellt. Diese Prozedur gibt die Namen, die gelieferten Produkte, die Bonität und die Verfügbarkeit aller Hersteller in der Adventure Works Cycles-Datenbank zurück, die das Unternehmen beliefern.

    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. Nachdem die Prozedur erstellt wurde, wird im zweiten Beispiel die sys.dm_sql_referencing_entities-Funktion verwendet, um die Objekte anzuzeigen, die von der Prozedur abhängen.

    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  
    
    

Systemfunktion: dm_sql_referenced_entities
Diese Funktion dient zum Anzeigen der Objekte, von denen eine Prozedur abhängt.

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Instanz der Datenbank-Engine her, und erweitern Sie dann diese Instanz.

  2. Erweitern Sie Datenbanken, und erweitern Sie die Datenbank, der die Prozedur angehört.

  3. Klicken Sie im Menü Datei auf Neue Abfrage .

  4. Kopieren Sie die folgenden Beispiele, und fügen Sie sie in den Abfrage-Editor ein. Im ersten Beispiel wird die uspVendorAllInfo-Prozedur erstellt. Diese Prozedur gibt die Namen, die gelieferten Produkte, die Bonität und die Verfügbarkeit aller Hersteller in der Adventure Works Cycles-Datenbank zurück, die das Unternehmen beliefern.

    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. Nachdem die Prozedur erstellt wurde, wird im zweiten Beispiel die sys.dm_sql_referenced_entities-Funktion verwendet, um die Objekte anzuzeigen, von denen die Prozedur abhängt.

    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  
    

Objektkatalogsicht: sql_expression_dependencies
Diese Sicht kann verwendet werden, um die Objekte anzuzeigen, von denen eine Prozedur abhängt, bzw. um die von einer Prozedur abhängigen Objekte anzuzeigen.

Anzeigen der Objekte, die von einer Prozedur abhängen.

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Instanz der Datenbank-Engine her, und erweitern Sie dann diese Instanz.

  2. Erweitern Sie Datenbanken, und erweitern Sie die Datenbank, der die Prozedur angehört.

  3. Klicken Sie im Menü Datei auf Neue Abfrage .

  4. Kopieren Sie die folgenden Beispiele, und fügen Sie sie in den Abfrage-Editor ein. Im ersten Beispiel wird die uspVendorAllInfo-Prozedur erstellt. Diese Prozedur gibt die Namen, die gelieferten Produkte, die Bonität und die Verfügbarkeit aller Hersteller in der Adventure Works Cycles-Datenbank zurück, die das Unternehmen beliefern.

    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. Nachdem die Prozedur erstellt wurde, wird im zweiten Beispiel die sys.sql_expression_dependencies-Sicht verwendet, um die Objekte anzuzeigen, die von der Prozedur abhängen.

    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  
    

Anzeigen der Objekte, von denen eine Prozedur abhängt.

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Instanz der Datenbank-Engine her, und erweitern Sie dann diese Instanz.

  2. Erweitern Sie Datenbanken, und erweitern Sie die Datenbank, der die Prozedur angehört.

  3. Klicken Sie im Menü Datei auf Neue Abfrage .

  4. Kopieren Sie die folgenden Beispiele, und fügen Sie sie in den Abfrage-Editor ein. Im ersten Beispiel wird die uspVendorAllInfo-Prozedur erstellt. Diese Prozedur gibt die Namen, die gelieferten Produkte, die Bonität und die Verfügbarkeit aller Hersteller in der Adventure Works Cycles-Datenbank zurück, die das Unternehmen beliefern.

    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. Nachdem die Prozedur erstellt wurde, wird im zweiten Beispiel die sys.sql_expression_dependencies-Sicht verwendet, um die Objekte anzuzeigen, von denen die Prozedur abhängt.

    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  
    

Weitere Informationen

Umbenennen einer gespeicherten Prozedur
sys.dm_sql_referencing_entities (Transact-SQL)
sys.dm_sql_referenced_entities (Transact-SQL)
sys.sql_expression_dependencies (Transact-SQL)