Поделиться через


sys.dm_sql_referencing_entities (Transact-SQL)

Возвращает одну строку для каждой сущности текущей базы данных, которая ссылается на имя какой-либо другой определенной пользователем сущности. Зависимость между двумя сущностями создается, когда имя некоторой сущности, называемой упоминаемой сущностью, встречается в составе постоянного выражения языка SQL другой сущности, называемой ссылающейся сущностью. Например, если в качестве упоминаемой сущности, выступает определяемый пользователем тип (UDT), то данная функция возвращает список всех определяемых пользователем сущностей, ссылающихся в своих определениях на имя указанного определяемого пользователем типа. Функция не возвращает список сущностей других баз данных, ссылающихся на указанную сущность. Данная функция предназначена для выполнения в контексте базы данных master и возвращает триггер DDL уровня сервера как ссылающаяся сущность.

Данная динамическая административная функция может быть использована для отображения списка сущностей текущей базы данных, ссылающихся на заданную сущность и имеющих следующие типы:

  • сущности, как связанные со схемой, так и не связанные;

  • триггеры DDL уровня базы данных;

  • триггеры DDL уровня сервера.

Значок ссылки на разделСоглашение о синтаксисе 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).

  • <упоминаемый_класс> ::= { 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.

Разрешения

Необходимо разрешение CONTROL на упоминаемую сущность и разрешение SELECT на представление sys.dm_sql_referencing_entities. Если упоминаемая сущность является функцией секционирования, необходимо разрешение CONTROL на базу данных. Разрешение SELECT по умолчанию предоставляется роли public.

Примеры

А. Получение списка сущностей, ссылающихся на заданную сущность

В следующем примере возвращается список сущностей текущей базы данных, которые ссылаются на указанную таблицу.

USE AdventureWorks2008R2;
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 AdventureWorks2008R2;
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)