Представление каталога sys.sql_expression_dependencies (Transact-SQL)
Область применения: 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_COLUMN DATABASE_DDL_TRIGGER SERVER_DDL_TRIGGER Не допускает значение NULL. |
is_schema_bound_reference | bit | 1 = упоминаемая сущность привязана к схеме. 0 = упоминаемая сущность не привязана к схеме. Не допускает значение NULL. |
referenced_class | tinyint | Класс упоминаемой сущности. 1 = Объект или столбец 6 = Тип 10 = коллекция схем XML 21 = функция секционирования Не допускает значение NULL. |
referenced_class_desc | nvarchar(60) | Описание класса упоминаемой сущности. OBJECT_OR_COLUMN ТИП XML_SCHEMA_COLLECTION PARTITION_FUNCTION Не допускает значение NULL. |
referenced_server_name | sysname | Имя сервера упоминаемой сущности. Этот столбец заполняется для межсерверных зависимостей, которые создаются путем задания допустимого четырехкомпонентного имени. Сведения о многопартийных именах см . в соглашениях о синтаксисе Transact-SQL. Значение NULL для не привязанных к схеме сущностей, ссылка на которые осуществляется без указания четырехкомпонентного имени. NULL для сущностей, привязанных к схеме, так как они должны находиться в одной базе данных, поэтому их можно определить только с помощью двух частей (schema.object). |
referenced_database_name | sysname | Имя базы данных упоминаемой сущности. Этот столбец заполняется для межбазовых и межсерверных ссылок, которые задаются путем указания допустимого трехкомпонентного или четырехкомпонентного имени. Имеет значение NULL для не привязанных к схеме ссылок, задаваемых с помощью однокомпонентного или двухкомпонентного имени. NULL для сущностей, привязанных к схеме, так как они должны находиться в одной базе данных, поэтому их можно определить только с помощью двух частей (schema.object). |
referenced_schema_name | sysname | Схема, которой принадлежит упоминаемая сущность. Имеет значение NULL для не привязанных к схеме ссылок, в которых сущность упоминается без указания имени схемы. Никогда не имеет значение NULL для привязанных к схеме ссылок, поскольку привязанные к схеме сущности должны определяться двухкомпонентным именем и ссылаться с помощью двухкомпонентных ссылок. |
referenced_entity_name | sysname | Имя упоминаемой сущности. Не допускает значение NULL. |
referenced_id | int | Идентификатор упоминаемой сущности. Значение этого столбца никогда не равно NULL для ссылок на схемы. Значение этого столбца всегда равно NULL для ссылок между серверами и несколькими базами данных. Имеет значение NULL для ссылок в пределах базы данных, когда не удается определить идентификатор. Для ссылок, не привязанных к схеме, идентификатор не удается разрешить в следующих случаях. Упоминаемая сущность не существует в базе данных. Схема упоминаемой сущности зависит от схемы участника и разрешается во время выполнения. В этом случае параметр 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) или ссылку xquery на столбец типа XML. Например, предположим, что инструкция SELECT Sales.GetOrder() FROM Sales.MySales определена в хранимой процедуре. До выполнения хранимой процедуры неизвестно, является ли Sales.GetOrder() определяемой пользователем функцией в схеме Sales или столбцом Sales определяемого пользователем типа с методом GetOrder() .1 = ссылка неоднозначна. 0 = ссылка однозначна, или сущность можно успешно привязать при вызове представления. Всегда принимает значение 0 для привязанных к схеме ссылок. |
Замечания
В следующей таблице перечислены типы сущностей, для которых созданы и обновляются данные о зависимостях. Данные о зависимостях не создаются и не обновляются для правил, значений по умолчанию, временных таблиц, временных хранимых процедур и системных объектов.
Примечание.
Azure Synapse Analytics и Parallel Data Warehouse поддерживают таблицы, представления, отфильтрованные статистические данные и типы сущностей хранимых процедур Transact-SQL из этого списка. Сведения о зависимости создаются и поддерживаются только для таблиц, представлений и отфильтрованной статистики.
Тип объекта | Ссылающаяся сущность | Упоминаемая сущность |
---|---|---|
Таблица | Да* | Да |
Представления | Да | Да |
Фильтруемый индекс | Да** | No |
Статистика фильтрации | Да** | No |
Хранимая процедура 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 не отслеживаются в качестве ссылающихся или упоминаемых сущностей.
Разрешения
Необходимо разрешение 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');
GO
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');
GO
C. Возвращение межбазовых зависимостей
В следующем примере возвращаются все межбазовые зависимости. Вначале в примере создается база данных db1
и две хранимые процедуры, которые ссылаются на таблицы в базах данных db2
и db3
. Затем запрашивается таблица sys.sql_expression_dependencies
, чтобы сообщить о наличии межбазовых зависимостей между процедурами и таблицами. Обратите внимание, что в столбце referenced_schema_name
для упоминаемой сущности t3
возвращается значение NULL, потому что для этой сущности в определении процедуры не указано имя схемы.
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;
GO
См. также
sys.dm_sql_referenced_entities (Transact-SQL)
sys.dm_sql_referencing_entities (Transact-SQL)