Udostępnij za pośrednictwem


Wyświetl zależności procedury składowanej

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database w usłudze Microsoft Fabric

W tym temacie opisano sposób wyświetlania zależności procedury składowanej w programie SQL Server przy użyciu programu SQL Server Management Studio lub Języka Transact-SQL.

Przed rozpoczęciem

Ograniczenia i ograniczenia

Bezpieczeństwo

Uprawnienia

Funkcja systemowa: sys.dm_sql_referencing_entities
Wymaga uprawnień CONTROL dla referencyjnej jednostki oraz uprawnień SELECT w sys.dm_sql_referencing_entities. Gdy przywołyana jednostka jest funkcją partycji, wymagane jest uprawnienie CONTROL w bazie danych. Domyślnie uprawnienie SELECT jest przyznawane publicznie.

Funkcja systemowa: sys.dm_sql_referenced_entities
Wymaga uprawnień SELECT dla sys.dm_sql_referenced_entities oraz uprawnień VIEW DEFINITION dla obiektu odwołującego się. Domyślnie uprawnienie SELECT jest przyznawane publicznie. Wymaga uprawnienia VIEW DEFINITION w bazie danych lub uprawnienia ALTER DATABASE DDL TRIGGER w bazie danych, gdy jednostka odwołująca się jest wyzwalaczem DDL na poziomie bazy danych. Wymaga uprawnienia WYŚWIETL DOWOLNĄ DEFINICJĘ na serwerze, gdy jednostka odwołująca się jest wyzwalaczem DDL na poziomie serwera.

Widok wykazu obiektów: sys.sql_expression_dependencies
Wymaga uprawnienia WYŚWIETL DEFINICJĘ oraz uprawnienia SELECT dla sys.sql_expression_dependencies w bazie danych. Domyślnie uprawnienie SELECT jest przyznawane tylko członkom stałej roli bazy danych db_owner. Gdy uprawnienia SELECT i VIEW DEFINITION zostaną przyznane innemu użytkownikowi, odbiorca może wyświetlić wszystkie zależności w bazie danych.

Jak wyświetlić zależności procedury składowanej

Możesz użyć jednej z następujących opcji:

Korzystanie z programu SQL Server Management Studio

Aby wyświetlić zależności procedury w Eksploratorze obiektów

  1. W Eksploratorze obiektów połącz się z instancją serwera bazy danych, a następnie rozwiń tę instancję.

  2. Rozwiń węzeł Databases, następnie rozwiń bazę danych zawierającą procedurę, a potem rozwiń węzeł Programmability.

  3. Rozwiń procedury składowane, kliknij prawym przyciskiem myszy procedurę, a następnie kliknij Wyświetl zależności.

  4. Wyświetl listę obiektów, które zależą od procedury.

  5. Wyświetl listę obiektów, od których zależy procedura.

  6. Kliknij przycisk OK.

Korzystanie z Transact-SQL

Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2022 lub AdventureWorksDW2022, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.

Aby wyświetlić zależności procedury w edytorze zapytań

Funkcja systemowa: sys.dm_sql_referencing_entities
Ta funkcja służy do wyświetlania obiektów, które zależą od procedury.

  1. W Eksploratorze obiektów , połącz się z instancją silnika bazy danych, a następnie rozwiń tę instancję.

  2. Rozwiń węzeł Databases, rozwiń bazę danych, do której należy procedura.

  3. Kliknij pozycję Nowe zapytanie w menu Plik.

  4. Skopiuj i wklej następujące przykłady do edytora zapytań. W pierwszym przykładzie zostanie utworzona procedura uspVendorAllInfo, która zwraca nazwy wszystkich dostawców w bazie danych Adventure Works Cycles, produktów, które dostarczają, oceny kredytowe i dostępność.

    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 utworzeniu procedury drugi przykład używa funkcji sys.dm_sql_referencing_entities do wyświetlania obiektów, które zależą od procedury.

    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  
    
    

Funkcja systemowa: sys.dm_sql_referenced_entities
Ta funkcja służy do wyświetlania obiektów, od których zależy procedura.

  1. W „Eksploratorze obiektów” połącz się z wystąpieniem silnika bazy danych, a następnie je rozwiń.

  2. Rozwiń sekcję Databases, rozwiń bazę danych, w której znajduje się procedura.

  3. Kliknij pozycję Nowe zapytanie w menu Plik.

  4. Skopiuj i wklej następujące przykłady do edytora zapytań. W pierwszym przykładzie zostanie utworzona procedura uspVendorAllInfo, która zwraca nazwy wszystkich dostawców w bazie danych Adventure Works Cycles, produktów, które dostarczają, oceny kredytowe i dostępność.

    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 utworzeniu procedury drugi przykład używa funkcji sys.dm_sql_referenced_entities do wyświetlania obiektów, od których zależy procedura.

    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  
    

Widok wykazu obiektów: sys.sql_expression_dependencies
Ten widok może służyć do wyświetlania obiektów, od których zależy procedura lub które zależą od procedury.

Wyświetlanie obiektów, które zależą od procedury.

  1. W eksploratorze obiektów połącz się z wystąpieniem aparatu bazy danych, a następnie rozwiń to wystąpienie.

  2. Rozwiń węzeł Databases, rozwiń bazę danych, do której należy procedura.

  3. Kliknij pozycję Nowe zapytanie w menu Plik.

  4. Skopiuj i wklej następujące przykłady do edytora zapytań. W pierwszym przykładzie zostanie utworzona procedura uspVendorAllInfo, która zwraca nazwy wszystkich dostawców w bazie danych Adventure Works Cycles, produktów, które dostarczają, oceny kredytowe i dostępność.

    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 utworzeniu procedury drugi przykład używa widoku sys.sql_expression_dependencies w celu wyświetlenia obiektów, które zależą od procedury.

    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  
    

Wyświetlanie obiektów, od których zależy procedura.

  1. W Eksploratorze obiektów połącz się z wystąpieniem silnika bazy danych i rozwiń to wystąpienie.

  2. Rozwiń węzeł Databases, rozwiń bazę danych, do której należy procedura.

  3. Kliknij pozycję Nowe zapytanie w menu Plik.

  4. Skopiuj i wklej następujące przykłady do edytora zapytań. W pierwszym przykładzie zostanie utworzona procedura uspVendorAllInfo, która zwraca nazwy wszystkich dostawców w bazie danych Adventure Works Cycles, produktów, które dostarczają, oceny kredytowe i dostępność.

    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 utworzeniu procedury drugi przykład używa widoku sys.sql_expression_dependencies w celu wyświetlenia obiektów, od których zależy procedura.

    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  
    

Zobacz też

Zmienianie nazwy procedury składowanej
sys.dm_sql_referencing_entities (Transact-SQL)
sys.dm_sql_referenced_entities (Transact-SQL)
sys.sql_expression_dependencies (Transact-SQL)