Последствия этого состоят в том, что когда вы приступаете к рефакторингу базы данных, труднее идентифицировать затронутые объекты.
Вы можете обновить все зависимости, написав скрипт для запуска sp_refreshsqlmodule
на всех объектах базы данных.
В SQL Server 2008 такие неразрешенные зависимости все еще хранятся и доступны через sys.sql_expression_dependencies
, что означает, что информация о зависимостях более надежна.
Поведение SQL Server 2008 выглядит следующим образом.
После создания зависимого, но до того, как существует корень
SELECT OBJECT_NAME(referencing_id) AS Name,
referencing_class_desc,
referenced_class_desc,
referenced_entity_name,
referenced_id,
is_caller_dependent,
is_ambiguous
FROM sys.sql_expression_dependencies
Возвращает
Name referenced_entity_name referenced_id is_caller_dependent is_ambiguous
---------- ------------------------- ------------- ------------------- ------------
dependant root NULL 1 0
В вашем примере кода это также результаты запроса после создания root
, так как ссылка на него не соответствует схеме и, следовательно, зависит от вызывающей стороны. Однако, если определение вашей dependant
процедуры изменено на
create procedure dependant as
exec dbo.root
Затем после создания dbo.root
возвращается следующее
Name referenced_entity_name referenced_id is_caller_dependent is_ambiguous
---------- ------------------------- ------------- ------------------- ------------
dependant root 2121058592 0 0