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)