sys.sql_dependencies (Transact-SQL)

Изменения: 12 декабря 2006 г.

Содержит строку для каждой зависимости от упоминаемой (независимой) сущности как упоминаемой в выражении SQL или инструкциях, определяющих какой-либо другой упоминаемый (зависимый) объект. Представление sys.sql_dependencies предназначено для отслеживания зависимостей между сущностями по имени. Для каждой строки в представлении sys.sql_dependencies ссылаемая сущность отображается в материализованном выражении SQL по имени ссылаемого объекта. Кроме того, если ссылаемый объект имеет привязанное к схеме выражение, зависимость создается принудительно. Дополнительные сведения см. в разделе Основные сведения о SQL зависимостях.

Имя столбца Тип данных Описание

class

tinyint

Идентифицирует класс упоминаемой (независимой) сущности:

0 = объект или столбец (только ссылки, не связанные со схемами);

1 = объект или столбец (ссылки, связанные со схемами);

2 = типы (ссылки, связанные со схемами);

3 = коллекции XML-схем (ссылки, связанные со схемами);

4 = функции секционирования (ссылки, связанные со схемами).

class_desc

nvarchar(60)

Описание класса упоминаемой (независимой) сущности:

  • OBJECT_OR_COLUMN_REFERENCE_NON_SCHEMA_BOUND;
  • OBJECT_OR_COLUMN_REFERENCE_SCHEMA_BOUND;
  • TYPE_REFERENCE
  • XML_SCHEMA_COLLECTION_REFERENCE;
  • PARTITION_FUNCTION_REFERENCE.

object_id

int

Идентификатор упоминающего (зависимого) объекта.

column_id

int

Если зависимый идентификатор представляет столбец — идентификатор столбца, содержащего ссылку (зависимого столбца); в противном случае — 0.

referenced_major_id

int

Идентификатор упоминаемой (независимой) сущности, интерпретированный по значению класса следующим образом:

0, 1 = Идентификатор объекта или столбца;

2 = Идентификатор типа;

3 = Идентификатор коллекции XML-схем.

referenced_minor_id

int

Вспомогательный идентификатор упоминаемой (независимой) сущности, интерпретированный по значению класса, как показано ниже.

Когда поле «class» равно:

0, идентификатор столбца referenced_minor_id; в противном случае — 0.

1, идентификатор столбца referenced_minor_id; в противном случае — 0.

В противном случае referenced_minor_id = 0.

is_selected

bit

Объект или столбец выбран.

is_updated

bit

Объект или столбец обновлен.

is_select_all

bit

Объект используется в инструкции SELECT * statement (только на уровне объекта).

Замечания

Зависимости устанавливаются во время выполнения инструкции CREATE, только если упоминаемая (независимая) сущность существует на момент создания упоминающего (зависимого) объекта. Разрешение имени в адрес выполняется динамически, поэтому во время создания нет необходимости в наличии упоминаемой сущности. В этом случае строка зависимости не создается. Более того, сущности, упоминаемые в динамическом SQL, не устанавливают зависимости.

Если упоминаемая (независимая) сущность удалена с помощью инструкции DROP, то строка зависимости удаляется автоматически. Для повторного создания строки зависимости потребуется повторно создать оба элемента в соответствующем порядке с помощью инструкции CREATE.

Для объектов отслеживаются зависимости как связанные, так и не связанные со схемами. Ограничения CHECK, значения по умолчанию и ссылки на вычисляемые столбцы неявно связаны со схемами. Зависимости от типов, коллекций XML-схем, а также функций секционирования отслеживаются только для зависимостей, связанных со схемами. В SQL Server 2005 с пакетом обновления 1 (SP1) и более ранних версий параметры, определенные в функции Transact-SQL или процедуре , неявно привязаны к схеме. Поэтому параметры, которые зависят от определяемого пользователем типа данных CLR, псевдонима или коллекции XML-схем, можно просматривать с помощью представления каталога sys.sql_dependencies. Однако это означает, что такие объекты нельзя переименовывать. В SQL Server 2005 с пакетом обновления 2 (SP2) параметры, которые зависят от этих объектов, отслеживаются в представлении каталога, только если модуль Transact-SQL создан с привязкой к схеме. Определяемый пользователем тип данных CLR, псевдоним или коллекция XML-схем, которые используются в качестве параметров в модуле, который не привязан к схеме, можно переименовывать, но, возможно, после этого определение модуля нужно будет обновить с помощью хранимой процедуры sp_refreshsqlmodule.

Примеры

А. Поиск зависимостей от указанной функции

В следующем примере возвращаются зависимости от указанной функции. Перед запуском приведенного ниже запроса замените <database_name> и <schema_name.function_name> допустимыми именами.

USE <database_name>;
GO
SELECT OBJECT_NAME(object_id) AS referencing_object_name
    ,COALESCE(COL_NAME(object_id, column_id), '(n/a)') AS referencing_column_name
    ,*
FROM sys.sql_dependencies
WHERE referenced_major_id = OBJECT_ID('<schema_name.function_name>')
ORDER BY OBJECT_NAME(object_id), COL_NAME(object_id, column_id);
GO 

Б. Поиск проверочных ограничений, зависящих от указанного определяемого пользователем типа данных CLR

Перед выполнением приведенного ниже запроса замените <database_name> допустимым именем, а <schema_name.data_type_name> — допустимым именем определяемого пользователем типа данных CLR с квалификатором схемы.

USE <database_name>;
GO
SELECT SCHEMA_NAME(o.schema_id) AS schema_name
    ,OBJECT_NAME(o.parent_object_id) AS table_name
    ,OBJECT_NAME(o.object_id) AS constraint_name
FROM sys.sql_dependencies AS d
JOIN sys.objects AS o ON o.object_id = d.object_id
WHERE referenced_major_id = TYPE_ID('<schema_name.data_type_name>')
    AND class = 2 -- schema-bound references to type
    AND OBJECTPROPERTY(o.object_id, 'IsCheckCnst') = 1; -- exclude non-CHECK dependencies
GO

В. Поиск представлений, функций Transact-SQL, а также хранимых процедур Transact-SQL, зависящих от указанного определяемого пользователем типа данных CLR или псевдонима типа

Следующий запрос возвращает все привязанные к схемам зависимости в представлениях, функциях Transact-SQL и хранимых процедурах Transact-SQL для указанных определяемых пользователем типов данных CLR или псевдонимов типов.

USE <database_name>;
GO
SELECT SCHEMA_NAME(o.schema_id) AS dependent_object_schema
  ,OBJECT_NAME(o.object_id) AS dependent_object_name
  ,o.type_desc AS dependent_object_type
  ,d.class_desc AS kind_of_dependency
  ,TYPE_NAME (d.referenced_major_id) AS type_name
FROM sys.sql_dependencies AS d 
JOIN sys.objects AS o
  ON d.object_id = o.object_id
  AND o.type IN ('FN','IF','TF', 'V', 'P')
WHERE d.class = 2 -- dependencies on types
  AND d.referenced_major_id = TYPE_ID('<schema_name.data_type_name>')
ORDER BY dependent_object_schema, dependent_object_name;
GO

См. также

Справочник

Представления каталога (Transact-SQL)
Представления каталога объектов (Transact-SQL)
sp_rename (Transact-SQL)
sp_refreshsqlmodule (Transact-SQL)

Другие ресурсы

Реализация определяемых пользователем типов данных
Основные сведения о SQL зависимостях
Часто задаваемые вопросы о запросах к системному каталогу сервера SQL Server
Управление коллекциями XML-схем на сервере

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

12 декабря 2006 г.

Новое содержимое
  • Добавлены сведения о том, когда определяемые пользователем типы, псевдонимы и зависимости коллекций XML-схем объявляются в модулях Transact-SQL в качестве параметров.
  • Добавлен раздел «Примеры».