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


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

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

  • Перед началом работы выполните следующие действия.  Ограничения, Безопасность

  • Просмотр зависимостей хранимой процедуры с помощью:  SQL Server Management Studio, Transact-SQL, PowerShell

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

Ограничения

[В начало]

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

Разрешения

[В начало]

  • Системная функция 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

  • Transact-SQL

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

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

  1. В обозревателе объектов подключитесь к экземпляру компонента Компонент Database Engine и разверните его.

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

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

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

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

  6. Нажмите кнопку ОК.

[В начало]

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

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

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

    1. В обозревателе объектов подключитесь к экземпляру компонента Компонент Database Engine и разверните его.

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

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

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

      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. После того как процедура будет создана, во втором примере будет использована функция 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. В обозревателе объектов подключитесь к экземпляру компонента Компонент Database Engine и разверните его.

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

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

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

      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. После того как процедура будет создана, во втором примере будет использована функция 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. В обозревателе объектов подключитесь к экземпляру компонента Компонент Database Engine и разверните его.

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

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

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

        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. После того как процедура будет создана, во втором примере будет использовано представление 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. В обозревателе объектов подключитесь к экземпляру компонента Компонент Database Engine и разверните его.

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

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

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

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

Основные понятия

Изменение имени хранимой процедуры