Sdílet prostřednictvím


Zobrazení závislostí uložené procedury

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)databáze SQL v Microsoft Fabric

Toto téma popisuje, jak zobrazit závislosti uložených procedur v SQL Serveru pomocí aplikace SQL Server Management Studio nebo jazyka Transact-SQL.

Než začnete

Omezení a restrikce

Bezpečnost

Dovolení

Systémová funkce: sys.dm_sql_referencing_entities
Vyžaduje oprávnění CONTROL u odkazované entity a oprávnění SELECT pro sys.dm_sql_referencing_entities. Pokud je odkazovaná entita funkcí oddílu, vyžaduje se oprávnění CONTROL k databázi. Ve výchozím nastavení se oprávnění SELECT uděluje veřejnosti.

Systémová funkce: sys.dm_sql_referenced_entities
Vyžaduje oprávnění SELECT pro sys.dm_sql_referenced_entities a oprávnění VIEW DEFINITION pro odkazovanou entitu. Ve výchozím nastavení se oprávnění SELECT uděluje veřejnosti. Vyžaduje oprávnění VIEW DEFINITION pro databázi nebo oprávnění ALTER DATABASE DDL TRIGGER v databázi, pokud odkazující entita je trigger DDL na úrovni databáze. Vyžaduje oprávnění VIEW ANY DEFINITION na serveru, pokud je odkazující entita triggerem DDL na úrovni serveru.

Zobrazení katalogu objektů: sys.sql_expression_dependencies
Vyžaduje oprávnění VIEW DEFINITION pro databázi a oprávnění SELECT pro sys.sql_expression_dependencies pro databázi. Ve výchozím nastavení je oprávnění SELECT uděleno pouze členům db_owner pevné databázové role. Pokud jsou oprávnění SELECT a VIEW DEFINITION udělena jinému uživateli, může příjemce zobrazit všechny závislosti v databázi.

Zobrazení závislostí uložené procedury

Můžete použít jednu z těchto možností:

Použití aplikace SQL Server Management Studio

Zobrazení závislostí procedury v Průzkumníku objektů

  1. V Průzkumníku objektů se připojte k instanci databázového stroje a pak tuto instanci rozbalte.

  2. Rozsviňte Databáze, rozsviňte databázi, která obsahuje proceduru, a potom rozsviňte Programovatelnost.

  3. Rozbalte uložené procedury, klepněte pravým tlačítkem myši na proceduru a klepněte na příkaz Zobrazit závislosti.

  4. Prohlédněte si seznam objektů, které závisí na postupu.

  5. Zobrazte seznam objektů, na kterých procedura závisí.

  6. Klepněte na tlačítko OK.

Použití Transact-SQL

Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2022 nebo AdventureWorksDW2022, kterou si můžete stáhnout z domovské stránky Microsoft SQL Server pro ukázky a komunitní projekty .

Zobrazení závislostí procedury v editoru dotazů

Systémová funkce: sys.dm_sql_referencing_entities
Tato funkce slouží k zobrazení objektů, které závisí na postupu.

  1. V Průzkumníku objektů, připojte se k instanci databázového stroje a poté tuto instanci rozbalte.

  2. Rozbalte Databáze, rozbalte databázi, do které procedura náleží.

  3. V nabídce Soubor klikněte na Nový dotaz.

  4. Zkopírujte následující příklady a vložte je do editoru dotazů. První příklad vytvoří uspVendorAllInfo proceduru, která vrátí názvy všech dodavatelů v databázi Adventure Works Cycles, produkty, které dodávají, jejich ratingy a dostupnost.

    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. Po vytvoření procedury použije druhý příklad funkci sys.dm_sql_referencing_entities k zobrazení objektů, které závisí na postupu.

    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  
    
    

Systémová funkce: sys.dm_sql_referenced_entities
Tato funkce slouží k zobrazení objektů, na které procedura závisí.

  1. V Průzkumníku objektů, připojte se k instanci Databázového stroje a poté tuto instanci rozbalte.

  2. Rozbalte Databázea poté rozbalte databázi, do které patří procedura.

  3. V nabídce Soubor klikněte na Nový dotaz.

  4. Zkopírujte následující příklady a vložte je do editoru dotazů. První příklad vytvoří uspVendorAllInfo proceduru, která vrátí názvy všech dodavatelů v databázi Adventure Works Cycles, produkty, které dodávají, jejich ratingy a dostupnost.

    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. Po vytvoření procedury použije druhý příklad funkci sys.dm_sql_referenced_entities k zobrazení objektů, na které procedura závisí.

    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  
    

Zobrazení katalogu objektů: sys.sql_expression_dependencies
Toto zobrazení lze použít k zobrazení objektů, na které procedura závisí nebo která závisí na postupu.

Zobrazení objektů, které závisí na postupu.

  1. V Průzkumníku objektů, připojte se k instanci Databázového stroje a pak ji rozbalte.

  2. Rozbalte Databáze, rozbalte databázi, do které procedura patří.

  3. V nabídce Soubor klikněte na Nový dotaz.

  4. Zkopírujte následující příklady a vložte je do editoru dotazů. První příklad vytvoří uspVendorAllInfo proceduru, která vrátí názvy všech dodavatelů v databázi Adventure Works Cycles, produkty, které dodávají, jejich ratingy a dostupnost.

    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. Po vytvoření procedury použije druhý příklad zobrazení sys.sql_expression_dependencies k zobrazení objektů, které závisí na postupu.

    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_description,   
        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  
    

Zobrazení objektů, na které procedura závisí.

  1. V Průzkumníku objektůse připojte k instanci databázového serveru a poté tuto instanci rozbalte.

  2. Rozbalte Databáze, a poté rozbalte databázi, do které procedura patří.

  3. V nabídce Soubor klikněte na Nový dotaz.

  4. Zkopírujte následující příklady a vložte je do editoru dotazů. První příklad vytvoří uspVendorAllInfo proceduru, která vrátí názvy všech dodavatelů v databázi Adventure Works Cycles, produkty, které dodávají, jejich ratingy a dostupnost.

    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. Po vytvoření procedury použije druhý příklad zobrazení sys.sql_expression_dependencies k zobrazení objektů, na které procedura závisí.

    USE AdventureWorks2022;  
    GO  
    SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name,   
        o.type_desc AS referencing_description,   
        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  
    

Viz také

přejmenovat uloženou proceduru
sys.dm_sql_referencing_entities (Transact-SQL)
sys.dm_sql_referenced_entities (Transact-SQL)
sys.sql_expression_dependencies (Transact-SQL)