Просмотр зависимостей хранимой процедуры
В этом разделе описывается, как просмотреть зависимости хранимой процедуры 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
Просмотр зависимостей процедуры в обозревателе объектов
В обозревателе объектов подключитесь к экземпляру компонента Компонент Database Engine и разверните его.
Последовательно разверните узел Базы данных, базу данных, которой принадлежит процедура, и узел Программирование.
Разверните узел Хранимые процедуры, щелкните процедуру правой кнопкой мыши и выберите пункт Просмотреть зависимости.
Просмотрите список объектов, находящихся в зависимости от процедуры.
Просмотрите список объектов, от которых зависит данная процедура.
Нажмите кнопку ОК.
[В начало]
Использование Transact-SQL
Просмотр зависимостей процедуры в редакторе запросов
Системная функция sys.dm_sql_referencing_entities
Эта функция используется для отображения объектов, зависящих от процедуры.В обозревателе объектов подключитесь к экземпляру компонента Компонент Database Engine и разверните его.
Разверните узел Базы данных, разверните базу данных, в которой находится процедура.
Выберите команду Создать запрос в меню Файл.
Скопируйте и вставьте следующие примеры в редактор запросов. В первом примере будет создана процедура 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
После того как процедура будет создана, во втором примере будет использована функция 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
Эта функция используется для отображения объектов, от которых зависит процедура.В обозревателе объектов подключитесь к экземпляру компонента Компонент Database Engine и разверните его.
Разверните узел Базы данных, разверните базу данных, в которой находится процедура.
Выберите команду Создать запрос в меню Файл.
Скопируйте и вставьте следующие примеры в редактор запросов. В первом примере будет создана процедура 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
После того как процедура будет создана, во втором примере будет использована функция 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
Это представление можно использовать для отображения объектов, от которых зависит процедура или которые зависят от процедуры.Отображение объектов зависит от процедуры.
В обозревателе объектов подключитесь к экземпляру компонента Компонент Database Engine и разверните его.
Разверните узел Базы данных, разверните базу данных, в которой находится процедура.
Выберите команду Создать запрос в меню Файл.
Скопируйте и вставьте следующие примеры в редактор запросов. В первом примере будет создана процедура 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
После того как процедура будет создана, во втором примере будет использовано представление 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
Отображение объектов, от которых зависит процедура.
В обозревателе объектов подключитесь к экземпляру компонента Компонент Database Engine и разверните его.
Разверните узел Базы данных, разверните базу данных, в которой находится процедура.
Выберите команду Создать запрос в меню Файл.
Скопируйте и вставьте следующие примеры в редактор запросов. В первом примере будет создана процедура 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
После того как процедура будет создана, во втором примере будет использовано представление 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)