Просмотр зависимостей хранимой процедуры
Применимо: SQL Server База данных SQL Azure Azure Synapse Analytics Analytics Platform System (PDW)
В этом разделе описывается, как просматривать зависимости хранимой процедуры в SQL Server с помощью SQL Server Management Studio или Transact-SQL.
Перед началом работы: Ограничения и ограничения, безопасность
Просмотр зависимостей процедуры с помощью: 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
Просмотр зависимостей процедуры в обозревателе объектов
В обозреватель объектов подключитесь к экземпляру ядро СУБД, а затем разверните этот экземпляр.
Последовательно разверните узел Базы данных, базу данных, которой принадлежит процедура, и узел Программирование.
Разверните узел Хранимые процедуры, щелкните процедуру правой кнопкой мыши и выберите пункт Просмотреть зависимости.
Просмотрите список объектов, находящихся в зависимости от процедуры.
Просмотрите список объектов, от которых зависит данная процедура.
Щелкните OK.
Использование Transact-SQL
Примеры кода Transact-SQL в этой статье используют AdventureWorks2022
базу данных или AdventureWorksDW2022
пример базы данных, которую можно скачать с домашней страницы примеров и проектов сообщества Microsoft SQL Server.
Просмотр зависимостей процедуры в редакторе запросов
Системная функция: sys.dm_sql_referencing_entities
Эта функция используется для отображения объектов, зависящих от процедуры.
В обозреватель объектов подключитесь к экземпляру ядро СУБД, а затем разверните этот экземпляр.
Разверните узел Базы данных, разверните базу данных, в которой находится процедура.
Выберите команду Создать запрос в меню Файл .
Скопируйте и вставьте следующие примеры в редактор запросов. Первый пример создает процедуру
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
После того как процедура будет создана, во втором примере будет использована функция 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
Эта функция используется для отображения объектов, от которых зависит процедура.
В обозреватель объектов подключитесь к экземпляру ядро СУБД, а затем разверните этот экземпляр.
Разверните узел Базы данных, разверните базу данных, в которой находится процедура.
Выберите команду Создать запрос в меню Файл .
Скопируйте и вставьте следующие примеры в редактор запросов. Первый пример создает процедуру
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
После того как процедура будет создана, во втором примере будет использована функция 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
Это представление можно использовать для отображения объектов, от которых зависит процедура или которые зависят от процедуры.
Отображение объектов зависит от процедуры.
В обозреватель объектов подключитесь к экземпляру ядро СУБД, а затем разверните этот экземпляр.
Разверните узел Базы данных, разверните базу данных, в которой находится процедура.
Выберите команду Создать запрос в меню Файл .
Скопируйте и вставьте следующие примеры в редактор запросов. Первый пример создает процедуру
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
После того как процедура будет создана, во втором примере будет использовано представление 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
Отображение объектов, от которых зависит процедура.
В обозреватель объектов подключитесь к экземпляру ядро СУБД, а затем разверните этот экземпляр.
Разверните узел Базы данных, разверните базу данных, в которой находится процедура.
Выберите команду Создать запрос в меню Файл .
Скопируйте и вставьте следующие примеры в редактор запросов. Первый пример создает процедуру
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
После того как процедура будет создана, во втором примере будет использовано представление 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)