sys.dm_sql_referencing_entities (Transact-SQL)
Возвращает одну строку для каждой сущности текущей базы данных, которая ссылается на имя какой-либо другой определенной пользователем сущности. Зависимость между двумя сущностями создается, когда имя некоторой сущности, называемой упоминаемой сущностью, встречается в составе постоянного выражения языка SQL другой сущности, называемой ссылающейся сущностью. Например, если в качестве упоминаемой сущности, выступает определяемый пользователем тип (UDT), то данная функция возвращает список всех определяемых пользователем сущностей, ссылающихся в своих определениях на имя указанного определяемого пользователем типа. Функция не возвращает список сущностей других баз данных, ссылающихся на указанную сущность. Чтобы возвратить в качестве ссылающейся сущности триггер DDL уровня сервер, данная функция должна выполняться в контексте базы данных master.
Данная динамическая административная функция может быть использована для отображения списка сущностей текущей базы данных, ссылающихся на заданную сущность и имеющих следующие типы:
сущности, как связанные со схемой, так и не связанные;
триггеры DDL уровня базы данных;
триггеры DDL уровня сервера.
Применимо для следующих объектов: SQL Server (начиная с SQL Server 2008 до текущей версии). |
Cинтаксические обозначения в Transact-SQL
Синтаксис
sys.dm_sql_referencing_entities (
' schema_name.referenced_entity_name ' , ' <referenced_class> ' )
<referenced_class> ::=
{
OBJECT
| TYPE
| XML_SCHEMA_COLLECTION
| PARTITION_FUNCTION
}
Аргументы
schema_name.referenced_entity_name
Имя упоминаемой сущности.Аргумент schema_name необходим, кроме тех случаев, когда упоминаемый класс относится к классу PARTITION_FUNCTION.
Аргумент schema_name.referenced_entity_name имеет тип nvarchar(517).
<referenced_class> ::= { OBJECT | TYPE | XML_SCHEMA_COLLECTION | PARTITION_FUNCTION }
Класс упоминаемой сущности. В одной инструкции может быть указан только один класс.Аргумент <referenced_class> имеет тип nvarchar(60).
Возвращаемая таблица
Имя столбца |
Тип данных |
Описание |
---|---|---|
referencing_schema_name |
sysname |
Схема, которой принадлежит ссылающаяся сущность. Допускаются значения NULL. Значение NULL для триггеров DDL уровня базы данных или сервера. |
referencing_entity_name |
sysname |
Имя ссылающейся сущности. Допускает значение NULL. |
referencing_id |
int |
Идентификатор ссылающейся сущности. Не допускает значения NULL. |
referencing_class |
tinyint |
Класс ссылающейся сущности. Не допускает значения NULL. 1 = объект 12 = триггер DDL уровня базы данных 13 = триггер DDL уровня сервера |
referencing_class_desc |
nvarchar(60) |
Описание класса ссылающейся сущности. OBJECT DATABASE_DDL_TRIGGER SERVER_DDL_TRIGGER |
is_caller_dependent |
bit |
Указывает разрешение идентификатора упоминаемой сущности, полученного во время выполнения (так как он зависит от схемы вызывающего объекта). Значение 1 означает, что ссылающаяся сущность может ссылаться на данный объект. При этом разрешение упоминаемой сущности зависит от вызывающего объекта и не может быть определено. Данная ситуация возможна только при вызове в инструкции EXECUTE не связанной со схемой ссылки на хранимую процедуру, расширенную хранимую процедуру или определяемую пользователем функцию. Значение 0 означает, что упоминаемая сущность не зависит от вызывающего объекта. |
Исключения
Возвращает пустой результирующий набор, если выполняется любое из следующих условий.
Указан системный объект.
Указанная сущность не существует в текущей базе данных.
Указанная сущность не ссылается ни на какие сущности.
Передан недопустимый параметр.
Возвращает ошибку, если заданная упоминаемая сущность является пронумерованной хранимой процедурой.
Замечания
В следующей таблице перечислены типы сущностей, для которых созданы и обновляются данные о зависимостях. Данные о зависимостях не создаются и не обновляются для правил, значений по умолчанию, временных таблиц, временных хранимых процедур и системных объектов.
Тип сущности |
Ссылающаяся сущность |
Упоминаемая сущность |
---|---|---|
Таблица |
Да* |
Да |
Представление |
Да |
Да |
Хранимая процедура Transact-SQL** |
Да |
Да |
Хранимая процедура CLR |
Нет |
Да |
Определяемая пользователем функция Transact-SQL |
Да |
Да |
Определяемая пользователем функция CLR |
Нет |
Да |
Триггер CLR (DML и DDL) |
Нет |
Нет |
Триггер DML Transact-SQL |
Да |
Нет |
Триггер DDL Transact-SQL уровня базы данных |
Да |
Нет |
Триггер DDL Transact-SQL уровня сервера |
Да |
Нет |
Расширенные хранимые процедуры |
Нет |
Да |
Очередь |
Нет |
Да |
Синоним |
Нет |
Да |
Тип (псевдоним и определяемый пользователем тип данных CLR) |
Нет |
Да |
Коллекция схем XML |
Нет |
Да |
Функция секционирования |
Нет |
Да |
* Таблица отслеживается в качестве ссылающейся сущности, только если она ссылается на модуль Transact-SQL, определяемый пользователем тип или коллекцию XML-схем в определении вычисляемого столбца, ограничении CHECK или ограничении DEFAULT.
** Пронумерованные хранимые процедуры с целочисленным значением больше 1 не отслеживаются в качестве ссылающихся или упоминаемых сущностей.
Разрешения
SQL Server 2008 – SQL Server 2012
Необходимо разрешение CONTROL для указанного объекта. Если упоминаемая сущность является функцией секционирования, необходимо разрешение CONTROL на базу данных.
Необходимо разрешение SELECT для sys.dm_sql_referencing_entities. Разрешение SELECT по умолчанию предоставляется роли public.
SQL Server 2014 - SQL Server 2014
Не требуются какие-либо разрешения на указанный объект. Частичные результаты могут быть возвращены, если пользователь имеет разрешение VIEW DEFINITION лишь на некоторые из указываемых сущностей.
Необходимо разрешение VIEW DEFINITION на объект, если ссылающаяся сущность является объектом.
Необходимо разрешение VIEW DEFINITION на базу данных, если ссылающаяся сущность является триггером DDL уровня базы данных.
Требуется разрешение VIEW ANY DEFINITION на уровне сервера, если ссылающаяся сущность является триггером DDL уровня сервера.
Примеры
А.Получение списка сущностей, ссылающихся на заданную сущность
В следующем примере возвращается список сущностей текущей базы данных, которые ссылаются на указанную таблицу.
USE AdventureWorks2012;
GO
SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent
FROM sys.dm_sql_referencing_entities ('Production.Product', 'OBJECT');
GO
Б.Получение списка сущностей, ссылающихся на заданный тип
В следующем примере возвращается список сущностей, ссылающихся на псевдоним типа dbo.Flag. Результирующий набор показывает, что этот тип используется двумя хранимыми процедурами. Тип dbo.Flag также используется в определениях некоторых столбцов таблицы HumanResources.Employee. Однако для таблицы HumanResources.Employee не выдается никаких строк, так как указанный тип не содержится в определении вычисляемого столбца, имеются ограничения CHECK или DEFAULT для данной таблицы.
USE AdventureWorks2012;
GO
SELECT referencing_schema_name, referencing_entity_name, referencing_id, referencing_class_desc, is_caller_dependent
FROM sys.dm_sql_referencing_entities ('dbo.Flag', 'TYPE');
GO
Ниже приводится результирующий набор.
referencing_schema_name referencing_entity_name referencing_id referencing_class_desc is_caller_dependent
----------------------- ------------------------- ------------- ---------------------- -------------------
HumanResources uspUpdateEmployeeHireInfo 1803153469 OBJECT_OR_COLUMN 0
HumanResources uspUpdateEmployeeLogin 1819153526 OBJECT_OR_COLUMN 0
(2 row(s) affected)
См. также
Справочник
Функция динамического управления sys.dm_sql_referenced_entities (Transact-SQL)
Представление каталога sys.sql_expression_dependencies (Transact-SQL)