Основные сведения о SQL зависимостях
Добавления: 5 декабря 2005 г.
SQL зависимости представляют собой именные ссылки, используемые в выражениях SQL, которые позволяют сделать один объект зависимым от другого. Возможно найти все именные зависимости при помощи запроса в представлении каталога sys.sql_dependencies. Для каждой строки в каталоге sys.sql_dependencies сущность (referenced_major_id), на которую сделана ссылка, появляется по имени в сохраненном выражении 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) и Проектирование и реализация представлений.
Примечание. |
---|
SQL Server 2005 не поддерживает привязанные к схеме хранимые процедуры или триггеры. |
Примеры зависимостей SQL
В следующей таблице перечислены примеры зависимостей SQL, которые существуют между ссылающимся объектами и объектами, на которые осуществляется ссылка.
Тип ссылающегося объекта
Выражение SQL в столбце определений представления каталога
Пример сущности, на которую осуществляется ссылка
Процедура, функция, представление, триггер
sys.sql_modules
Примечание.
Для триггеров уровня сервера, см. каталог 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 для столбца, например:
|
Столбец. Из примера |
Между определением DEFAULT и столбцом не существует зависимости SQL, потому что по умолчанию |
См. также
Другие ресурсы
sys.sql_dependencies (Transact-SQL)
sys.sysdepends (Transact-SQL)
sp_depends (Transact-SQL)