Поделиться через


Просмотр зависимостей хранимой процедуры

Применимо: SQL Server База данных SQL AzureНе поддерживается. Azure Synapse Analytics Analytics Platform System (PDW)

В этом разделе описывается, как просматривать зависимости хранимой процедуры в SQL Server с помощью SQL Server Management Studio или Transact-SQL.

Перед началом

Ограничения

Безопасность

Разрешения

Системная функция: sys.dm_sql_referencing_entities
Необходимо разрешение CONTROL на упоминаемую сущность и разрешение SELECT на представление sys.dm_sql_referencing_entities. Если упоминаемая сущность является функцией секционирования, необходимо разрешение CONTROL на базу данных. Разрешение SELECT по умолчанию предоставляется роли public.

Системная функция: sys.dm_sql_referenced_entities
Требует разрешения SELECT для функции sys.dm_sql_referenced_entities и разрешения VIEW DEFINITION для ссылающейся сущности. Разрешение SELECT по умолчанию предоставляется роли public. Требует разрешения VIEW DEFINITION для базы данных, либо, если ссылающаяся сущность является триггером DDL уровня базы данных, разрешения ALTER DATABASE DDL TRIGGER. Если указанный модуль является триггером DDL уровня сервера, то требуется разрешение VIEW ANY DEFINITION на уровне сервера.

Представление каталога объектов: sys.sql_expression_dependencies
Необходимо разрешение VIEW DEFINITION в базе данных и разрешение SELECT на представление sys.sql_expression_dependencies в базе данных. По умолчанию разрешение SELECT предоставляется только членам предопределенной роли базы данных db_owner. Если разрешения SELECT и VIEW DEFINITION предоставлены другому пользователю, он может просматривать все зависимости в базе данных.

Просмотр зависимостей хранимой процедуры

Можно использовать один из следующих способов:

Использование среды SQL Server Management Studio

Просмотр зависимостей процедуры в обозревателе объектов

  1. В обозреватель объектов подключитесь к экземпляру ядро СУБД, а затем разверните этот экземпляр.

  2. Последовательно разверните узел Базы данных, базу данных, которой принадлежит процедура, и узел Программирование.

  3. Разверните узел Хранимые процедуры, щелкните процедуру правой кнопкой мыши и выберите пункт Просмотреть зависимости.

  4. Просмотрите список объектов, находящихся в зависимости от процедуры.

  5. Просмотрите список объектов, от которых зависит данная процедура.

  6. Щелкните OK.

Использование Transact-SQL

Примеры кода Transact-SQL в этой статье используют AdventureWorks2022 базу данных или AdventureWorksDW2022 пример базы данных, которую можно скачать с домашней страницы примеров и проектов сообщества Microsoft SQL Server.

Просмотр зависимостей процедуры в редакторе запросов

Системная функция: sys.dm_sql_referencing_entities
Эта функция используется для отображения объектов, зависящих от процедуры.

  1. В обозреватель объектов подключитесь к экземпляру ядро СУБД, а затем разверните этот экземпляр.

  2. Разверните узел Базы данных, разверните базу данных, в которой находится процедура.

  3. Выберите команду Создать запрос в меню Файл .

  4. Скопируйте и вставьте следующие примеры в редактор запросов. Первый пример создает процедуру uspVendorAllInfo , которая возвращает имена всех поставщиков в базе данных Adventure Works Cycles, продукты, которые они предоставляют, их кредитные рейтинги и их доступность.

    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. После того как процедура будет создана, во втором примере будет использована функция 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. Скопируйте и вставьте следующие примеры в редактор запросов. Первый пример создает процедуру uspVendorAllInfo , которая возвращает имена всех поставщиков в базе данных Adventure Works Cycles, продукты, которые они предоставляют, их кредитные рейтинги и их доступность.

    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. После того как процедура будет создана, во втором примере будет использована функция sys.dm_sql_referencing_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. Скопируйте и вставьте следующие примеры в редактор запросов. Первый пример создает процедуру uspVendorAllInfo , которая возвращает имена всех поставщиков в базе данных Adventure Works Cycles, продукты, которые они предоставляют, их кредитные рейтинги и их доступность.

    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. После того как процедура будет создана, во втором примере будет использовано представление 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. Скопируйте и вставьте следующие примеры в редактор запросов. Первый пример создает процедуру uspVendorAllInfo , которая возвращает имена всех поставщиков в базе данных Adventure Works Cycles, продукты, которые они предоставляют, их кредитные рейтинги и их доступность.

    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. После того как процедура будет создана, во втором примере будет использовано представление 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)