Основные сведения о SQL зависимостях

Добавления: 5 декабря 2005 г.

SQL зависимости представляют собой именные ссылки, используемые в выражениях SQL, которые позволяют сделать один объект зависимым от другого. Возможно найти все именные зависимости при помощи запроса в представлении каталога sys.sql_dependencies. Для каждой строки в каталоге sys.sql_dependencies сущность (referenced_major_id), на которую сделана ссылка, появляется по имени в сохраненном выражении SQL ссылающегося объекта.

На следующем рисунке показан пример SQL зависимости.

Иллюстрация зависимости в SQL

На рисунке представлены два объекта: процедура X и процедура Y. Процедура Х содержит выражение SQL, имеющее именную ссылку на процедуру Y. Процедура Х известна как ссылающийся или зависимый объект, а процедура Y известна как ссылаемый или независимый объект. Так как процедура Х зависит от процедуры Y, то процедура Х завершится ошибкой времени выполнения, если процедура Y не существует. Тем не менее, процедура Y не завершится ошибкой, если процедура Х не существует.

Следующий пример показывает, как хранимая процедура X может зависеть от хранимой процедуры Y.

USE tempdb
GO
CREATE PROCEDURE Y AS
SELECT * FROM sys.objects
GO
CREATE PROCEDURE X as
    EXEC Y
GO

Чтобы просмотреть зависимость X от Y, запустите следующий запрос:

SELECT * 
FROM  sys.sql_dependencies 
WHERE object_id = object_id('X')
   AND   referenced_major_id = object_id('Y')
   AND   referenced_minor_id = 0
   AND   class = 0;
GO

Если процедура X удалена, процедуру Y все еще можно запустить. Процедура Y не зависит от процедуры X. И наоборот, если удалить процедуру Y и попытаться запустить процедуру X, SQL Server возвращает ошибку времени выполнения. Процедура X зависит от процедуры Y.

После удаления процедуры Y строка для процедуры X в представлении каталога sys.sql_dependencies также удаляется. Чтобы просмотреть данное поведение, необходимо запустить следующий код.

USE tempdb;
GO
DROP PROCEDURE Y;
GO
SELECT * 
FROM  sys.sql_dependencies 
WHERE object_id = object_id('X')
   AND   referenced_major_id = object_id('Y')
   AND   referenced_minor_id = 0
   AND   class = 0;
GO

Можно использовать предложение WITH SCHEMABINDING для обеспечения сохранения зависимости. Если привязать к схеме представление, то невозможно изменить или удалить связанную таблицу или столбцы способом, разрушающим зависимость. Аналогично, если привязать к схеме функцию, то невозможно будет изменить или удалить связанные объекты или столбцы способом, нарушающим зависимость от функции. Дополнительные сведения о параметрах схемы см. в разделе Создание пользовательских функций (Database Engine) и Проектирование и реализация представлений.

ms345449.note(ru-ru,SQL.90).gifПримечание.
SQL Server 2005 не поддерживает привязанные к схеме хранимые процедуры или триггеры.

Примеры зависимостей SQL

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

Тип ссылающегося объекта

Выражение SQL в столбце определений представления каталога

Пример сущности, на которую осуществляется ссылка

Процедура, функция, представление, триггер

sys.sql_modules

ms345449.note(ru-ru,SQL.90).gifПримечание.

Для триггеров уровня сервера, см. каталог sys.server_sql_modules.

Таблица, процедура, тип

Вычисляемый столбец

sys.computed_columns

Функция, тип, другой столбец

Определение DEFAULT

sys.default_constraints

Функция

Ограничение CHECK

sys.check_constraints

Функция, функция секционирования

Пронумерованная процедура

sys.numbered_procedure

Таблица, процедура, тип

Функция, привязанная к схеме

sys.sql_modules

Коллекция XML-схем

Примеры зависимостей, не относящихся к SQL

Не все зависимости, существующие между объектами, являются зависимостями SQL. Если объект не имеет выражения SQL, содержащего именную ссылку на другой объект, то зависимость SQL между этими двумя объектами не существует. В следующей таблице приведены примеры зависимостей, не являющихся зависимостями SQL.

Тип ссылающегося объекта Зависит от Описание

Столбец

Таблица

Зависимость между таблицей и ее столбцом является неявной. Эта связь отображается в системном каталоге как внешний ключ sys.columns.object_id.

Определение DEFAULT для столбца, например:

CREATE TABLE myTable AS

(ColA int CONSTRAINT Const1 DEFAULT 1)

Столбец. Из примера ColA.

Между определением DEFAULT и столбцом не существует зависимости SQL, потому что по умолчанию Const1 не обращается к столбцам ColA по имени. Вместо этого существует ссылка внешнего ключа от каталога sys.columns.default_object_id к объекту определения DEFAULT.

См. также

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

sys.sql_dependencies (Transact-SQL)
sys.sysdepends (Transact-SQL)
sp_depends (Transact-SQL)

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

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