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


sys.dm_sql_referencing_entities (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

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

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

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

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

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

Область применения: SQL Server (SQL Server 2008 (10.0.x) и более поздних версий), База данных SQL.

Соглашения о синтаксисе 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).

Возвращаемая таблица

Имя столбца Тип данных Description
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 No Да
Определяемая пользователем функция Transact-SQL Да Да
Определяемая пользователем функция CLR No Да
Триггер CLR (DML и DDL) No No
Триггер DML Transact-SQL Да Нет
Триггер DDL уровня базы данных Transact-SQL Да Нет
Триггер DDL уровня Transact-SQL Да Нет
Расширенные хранимые процедуры No Да
Queue No Да
Синоним No Да
Тип (псевдоним и определяемый пользователем тип данных CLR) No Да
Коллекция схем XML No Да
Функция секционирования No Да

* Таблица отслеживается как сущность, ссылающаяся только в том случае, если она ссылается на модуль Transact-SQL, определяемый пользователем тип или коллекцию схем XML в определении вычисляемого столбца, ограничения CHECK или ограничения DEFAULT.

** Пронумерованные хранимые процедуры с целочисленным значением больше 1 не отслеживаются в качестве ссылающихся или упоминаемых сущностей.

Разрешения

SQL Server 2008 (10.0.x) — SQL Server 2012 (11.x)

  • Необходимо разрешение CONTROL для указанного объекта. Если упоминаемая сущность является функцией секционирования, необходимо разрешение CONTROL на базу данных.

  • Требуется разрешение SELECT на sys.dm_sql_referencing_entities. Разрешение SELECT по умолчанию предоставляется роли public.

SQL Server 2014 (12.x) и более поздних версий

  • Не требуются какие-либо разрешения на указанный объект. Частичные результаты могут быть возвращены, если пользователь имеет разрешение VIEW DEFINITION лишь на некоторые из указываемых сущностей.

  • Необходимо разрешение VIEW DEFINITION на объект, если ссылающаяся сущность является объектом.

  • Необходимо разрешение VIEW DEFINITION на базу данных, если ссылающаяся сущность является триггером DDL уровня базы данных.

  • Требуется разрешение VIEW ANY DEFINITION на уровне сервера, если ссылающаяся сущность является триггером DDL уровня сервера.

Примеры

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

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

USE AdventureWorks2022;  
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  

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

В следующем примере возвращается список сущностей, ссылающихся на псевдоним типа dbo.Flag. Результирующий набор показывает, что этот тип используется двумя хранимыми процедурами. Тип dbo.Flag также используется в определении нескольких столбцов в таблице, однако, поскольку тип не находится в определении вычисляемого столбца, ограничения CHECK или ограничения DEFAULT в HumanResources.Employee таблице, строки не возвращаются для HumanResources.Employee таблицы.

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