Просмотр зависимостей хранимой процедуры
Применимо к:SQL Server
База данных SQL Azure
Управляемый экземпляр SQL Azure
Аналитика Azure Synapse
Платформа аналитических систем (PDW)
База данных SQL в Microsoft Fabric
В этом разделе описывается, как просматривать зависимости хранимой процедуры в 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 по умолчанию предоставляется общедоступной группе пользователей. Требуется разрешение VIEW DEFINITION для базы данных или разрешение ALTER DATABASE DDL TRIGGER, если ссылающаяся сущность является триггером DDL уровня базы данных. Если ссылающийся объект является триггером 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
Примеры кода в этой статье используют базу данных образца AdventureWorks2022
или AdventureWorksDW2022
, которую можно скачать с домашней страницы образцов и проектов сообщества Microsoft SQL Server и.
Просмотр зависимостей процедуры в редакторе запросов
Системная функция: sys.dm_sql_referencing_entities
Эта функция используется для отображения объектов, зависящих от процедуры.
В Обозреватель объектов подключитесь к экземпляру Database Engine и разверните этот экземпляр.
Разверните узел Базы данных и откройте базу данных, в которой находится процедура.
Выберите команду Создать запрос в меню Файл .
Скопируйте и вставьте следующие примеры в редактор запросов. Первый пример создает процедуру
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_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
Отображение объектов, от которых зависит процедура.
В Обозревателе объектов, подключитесь к экземпляру Службы данных SQL Server, а затем разверните экземпляр.
Разверните узел Базы данных, затем разверните базу данных, содержащую процедуру.
Выберите команду Создать запрос в меню Файл .
Скопируйте и вставьте следующие примеры в редактор запросов. Первый пример создает процедуру
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_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
См. также
Изменение имени хранимой процедуры
sys.dm_sql_referencing_entities (Transact-SQL)
sys.dm_sql_referenced_entities (Transact-SQL)
sys.sql_expression_dependencies (Transact-SQL)