Представление каталога sys.sql_expression_dependencies (Transact-SQL)

Область применения:SQL Server Управляемый экземпляр SQL Azure Azure Synapse Analytics Analytics Platform System (PDW)SQL AnalyticsEndpoints в хранилище 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)