Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: SQL Server
Управляемый экземпляр SQL Azure
конечную точку аналитики платформы Аналитики Azure Synapse Analytics (PDW)
в хранилище Microsoft Fabric
в Microsoft Fabric
Содержит по одной строке для каждой именованной зависимости определяемой пользователем сущности в текущей базе данных. Сюда входят зависимости между скомпилированных в собственном коде, скалярными пользовательскими функциями и другими модулями SQL Server. Зависимость между двумя сущностями создается, когда одна сущность, называемая указанной сущностью, отображается по имени в сохраняемом выражении SQL другой сущности, называемой сущностью ссылки. Например, если на таблицу ссылается определение представления, это представление, как ссылающаяся сущность, зависит от таблицы или упоминаемой сущности. При удалении таблицы представление становится непригодным для использования.
Дополнительные сведения см. в разделе Скалярные определяемые пользователем функции для выполняющейся в памяти OLTP.
Это представление каталога можно использовать для получения сведений о зависимостях по следующим сущностям:
привязанные к схеме сущности;
сущности без привязки к схеме;
межбазовые и межсерверные сущности. Указываются названия организаций; однако идентификаторы сущностей не разрешаются.
зависимости на уровне столбцов в сущностях, привязанных к схеме. Зависимости уровня столбца для объектов, не связанных с схемой, можно возвращать с помощью sys.dm_sql_referenced_entities.
DDL на уровне сервера срабатывает в контексте
masterбазы данных.
| Имя столбца | Тип данных | Description |
|---|---|---|
referencing_id |
int | Идентификатор ссылающейся сущности. Не допускает значения NULL. |
referencing_minor_id |
int | Идентификатор столбца, если ссылающаяся сущность является столбцом; в противном случае — 0. Не допускает значения NULL. |
referencing_class |
tinyint | Класс ссылающейся сущности.1 = Объект или столбец12 = Триггер DDL базы данных13 = Триггер DDL сервераНе допускает значения NULL. |
referencing_class_desc |
nvarchar(60) | Описание класса ссылающейся сущности.OBJECT_OR_COLUMNDATABASE_DDL_TRIGGERSERVER_DDL_TRIGGERНе допускает значения NULL. |
is_schema_bound_reference |
bit |
1 = Связанная сущность связана схемой.0 = Связанная сущность не связана схемой.Не допускает значения NULL. |
referenced_class |
tinyint | Класс упоминаемой сущности.1 = Объект или столбец6 = Тип7 = Индекс10 = коллекция схем XML21 = Функция распределенияНе допускает значения NULL. |
referenced_class_desc |
nvarchar(60) | Описание класса упоминаемой сущности.OBJECT_OR_COLUMNTYPEINDEXXML_SCHEMA_COLLECTIONPARTITION_FUNCTIONНе допускает значения NULL. |
referenced_server_name |
sysname | Имя сервера упоминаемой сущности. Этот столбец заполняется для межсерверных зависимостей, которые создаются путем задания допустимого четырехкомпонентного имени. Сведения о многопартийных именах см . в соглашениях о синтаксисе Transact-SQL. NULL для сущностей, не связанных со схемой, для которых сущность была указана без указания четырёхчастного имени.NULL для сущностей, связанных со схемой, поскольку они должны находиться в одной базе данных и, следовательно, могут быть определены только с помощью двухчастного имени (schema.object). |
referenced_database_name |
sysname | Имя базы данных упоминаемой сущности. Этот столбец заполняется для межбазовых и межсерверных ссылок, которые задаются путем указания допустимого трехкомпонентного или четырехкомпонентного имени. NULL для ссылок, не связанных со схемой, при указании с использованием названия из одной или двух частей.NULLдля сущностей, связанных со схемой,поскольку они должны находиться в одной базе данных и, следовательно, могут быть определены только с помощью двухчастной (схема).имя объекта). |
referenced_schema_name |
sysname | Схема, которой принадлежит упоминаемая сущность.NULL для ссылок, не связанных со схемой, в которых сущность была указана без указания имени схемы.Никогда NULL не для ссылок, ограниченных схемой, потому что сущности, связанные со схемой, должны быть определены и ссылаться с помощью двухчастного названия. |
referenced_entity_name |
sysname | Имя упоминаемой сущности. Не допускает значения NULL. |
referenced_id |
int | Идентификатор упоминаемой сущности. Значение этого столбца никогда NULL не относится к ссылкам, ограниченным схемой. Значение этого столбца всегда NULL относится к кросс-серверным и кросс-базам данных.NULL для ссылок внутри базы данных, если идентификатор невозможно определить. Для ссылок, не связанных со схемой, ID нельзя разрешить в следующих случаях:Ссылающаяся сущность не существует в базе данных. Схема упоминаемой сущности зависит от схемы участника и разрешается во время выполнения. В этом случае параметр is_caller_dependent устанавливается в значение 1. |
referenced_minor_id |
int | Идентификатор ссылочного столбца в случае, если ссылающейся сущностью является столбец; в противном случае — 0. Не допускает значения NULL. Упоминаемая сущность представляет собой столбец, если в ссылающейся сущности столбец определяется по имени или если в инструкции SELECT * используется родительская сущность. |
is_caller_dependent |
bit | Указывает, что привязка к схеме для упоминаемой сущности происходит во время выполнения, и поэтому разрешение идентификатора сущности зависит от схемы ссылающейся сущности. Это происходит, если упоминаемая сущность является хранимой процедурой, расширенной хранимой процедурой или определяемой пользователем функцией, не привязанной к схеме, вызываемой в инструкции EXECUTE.1 = Ссылающаяся сущность зависит от вызывающего и разрешается во время выполнения. В данном случае referenced_id — NULL.0 = Идентификатор сущности, на которую ссылается, не зависит от вызывающего.Всегда имеет значение 0 для привязанных к схеме ссылок, а также для межбазовых и межсерверных ссылок, которые явно указывают имя схемы. Например, ссылка на сущность в формате EXEC MyDatabase.MySchema.MyProc не зависит от вызывающего. При этом ссылка в формате EXEC MyDatabase..MyProc зависит от вызывающего объекта. |
is_ambiguous |
bit | Указывает, что ссылка неоднозначна и может разрешиться во время выполнения с пользовательской функцией, пользовательским типом (UDT) или ссылкой на столбец типа xml в XQuery. Например, предположим, что инструкция SELECT Sales.GetOrder() FROM Sales.MySales определена в хранимой процедуре. Пока сохранённая процедура не будет выполнена, неизвестно, является Sales.GetOrder() ли пользовательской функцией в Sales схеме или столбцем типа Sales UDT с методом под названием GetOrder().1 = Ссылка неоднозначна.0 = Ссылка однозначна или сущность может быть успешно связана при вызове представления.Всегда принимает значение 0 для привязанных к схеме ссылок. |
Замечания
В следующей таблице перечислены типы сущностей, для которых созданы и обновляются данные о зависимостях. Информация о зависимостях не создаётся и не поддерживается для правил, стандартов, временных таблиц, временных хранимых процедур или системных объектов.
Примечание.
Azure Synapse Analytics и Parallel Data Warehouse поддерживают таблицы, представления, отфильтрованные статистические данные и типы сущностей хранимых процедур Transact-SQL из этого списка. Сведения о зависимости создаются и поддерживаются только для таблиц, представлений и отфильтрованной статистики.
| Тип объекта | Ссылающаяся сущность | Упоминаемая сущность |
|---|---|---|
| Таблица | Да1 | Да |
| Представления | Да | Да |
| Фильтруемый индекс | Да2 | No |
| Статистика фильтрации | Да2 | No |
| Transact-SQL сохранённая процедура3 | Да | Да |
| Хранимая процедура CLR | No | Да |
| Определяемая пользователем функция Transact-SQL | Да | Да |
| Определяемая пользователем функция CLR | No | Да |
| Триггер CLR (DML и DDL) | No | No |
| Триггер DML Transact-SQL | Да | No |
| Триггер DDL уровня базы данных Transact-SQL | Да | No |
| Триггер DDL уровня Transact-SQL | Да | No |
| Расширенные хранимые процедуры | No | Да |
| Queue | No | Да |
| Синоним | No | Да |
| Тип (псевдоним и определяемый пользователем тип данных CLR) | No | Да |
| Коллекция схем XML | No | Да |
| Функция секционирования | No | Да |
1 Таблица отслеживается как сущность ссылки только тогда, когда она ссылается на Transact-SQL-модуль, пользовательский тип или коллекцию схем XML в определении вычисленного столбца, ограничения CHECK или DEFAULT ограничений.
2 Каждый столбец, используемый в предикате фильтра, отслеживается как сущность ссылок.
3 Нумерованные хранящиеся процедуры с целочисленным значением больше 1 не отслеживаются ни как ссылочные, ни как ссылочные сущности.
Разрешения
Требуется VIEW разрешение DEFINITION для базы данных и разрешение SELECT sys.sql_expression_dependencies для базы данных. По умолчанию разрешение SELECT предоставляется только членам предопределенной роли базы данных db_owner . Когда разрешения SELECT и VIEW DEFINITION предоставляются другому пользователю, участник может просматривать все зависимости в базе данных.
Примеры
А. Возвращать сущности, на которые ссылается другой сущность.
В следующем примере возвращаются таблицы и столбцы, на которые ссылается представление Production.vProductAndDescription. Это представление зависит от сущностей (таблиц и столбцов), возвращаемых в столбцах referenced_entity_name и referenced_column_name.
USE AdventureWorks2022;
GO
SELECT
OBJECT_NAME(referencing_id) AS referencing_entity_name,
o.type_desc AS referencing_description,
COALESCE (COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id,
referencing_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'Production.vProductAndDescription');
B. Возвращать сущности, которые ссылаются на другую сущность
В следующем примере возвращаются сущности, ссылающиеся на таблицу Production.Product. Сущности, возвращенные в столбце referencing_entity_name, зависят от таблицы Product.
USE AdventureWorks2022;
GO
SELECT
OBJECT_SCHEMA_NAME(referencing_id) AS referencing_schema_name,
OBJECT_NAME(referencing_id) AS referencing_entity_name,
o.type_desc AS referencing_description,
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'Production.Product');
В. Возврат зависимостей между базами данных
В следующем примере возвращаются все межбазовые зависимости. Вначале в примере создается база данных db1 и две хранимые процедуры, которые ссылаются на таблицы в базах данных db2 и db3. Затем запрашивается таблица sys.sql_expression_dependencies, чтобы сообщить о наличии межбазовых зависимостей между процедурами и таблицами.
NULL возвращается в referenced_schema_name столбце для ссылаемой сущности t3 , потому что имя схемы для этой сущности не указано в определении процедуры.
CREATE DATABASE db1;
GO
USE db1;
GO
CREATE PROCEDURE p1 AS
SELECT * FROM db2.s1.t1;
GO
CREATE PROCEDURE p2 AS
UPDATE db3..t3
SET c1 = c1 + 1;
GO
SELECT
OBJECT_NAME(referencing_id),
referenced_database_name,
referenced_schema_name,
referenced_entity_name
FROM sys.sql_expression_dependencies
WHERE referenced_database_name IS NOT NULL;
GO
USE master;
GO
DROP DATABASE db1;