Views & Inline Functions
Сравнивать и синхронизировать Views & Inline Functions.
Создавать
Создавать новые, если их нет в целевой базе данных.
Пересоздавать
Пересоздавать (удалить и создать) существующие, чтобы устранить отличия.
Удалять
Удалять существующие, если их нет в шаблонной базе данных.
Пересоздать Все
Пересоздавать все объекты данного типа в целевой базе данных.
ANSI_NULLS
Если эта опция не установлена, алгоритм сравнения будет игнорировать свойство ANSI_NULLS views при сравнении, однако, если view пересоздается из-за других различий, будет принято новое значение.
Добавлять обновление Views & Inline Functions
Добавлять в скрипт синхронизации специальный алгоритм для обновления Views & Inline Functions в требуемом порядке.
Обновлять по измененным зависимостям
Обновлять все объекты, которые ссылаются на измененные или пересозданные объекты с момента выполнения подготовительного скрипта.
Обновлять по просроченным зависимостям
Обновлять все объекты, которые ссылаются на другие объекты с более новой датой изменения.
Все
Обновлять все объекты.
Обновление метаданных с помощью sp_refreshview и sp_refreshsqlmodule
Завершающий этап синхронизации структуры базы данных - это обновление метаданных представлений и встраиваемых функций. Ниже приведена часть алгоритма, который осуществляет обновление представлений и встраиваемых функций итерационным способом в требуемом порядке на основе зависимостей между объектами.
Тип алгоритма определяется выбранными опциями в Добавлять обновление Views & Inline Functions.
...
WHILE @@FETCH_STATUS = 0 BEGIN
SET @found = @found + 1;
IF -- skip with schemabinding
@is_schema_bound = 0
-- skip if it is not referencing to anything
AND @last_referenced_modify_date IS NOT NULL AND (
-- the referenced object has been changed by this synchronization script
@last_referenced_modify_date > @sync_start_date
-- the referenced object is up to date
OR (@is_refresh_overdue = 1 AND @last_referenced_modify_date > @modify_date) ) BEGIN
SET @iterations = @iterations + 1;
BEGIN TRY
IF @type = 'V' BEGIN
EXECUTE sp_refreshview @name;
END ELSE BEGIN
EXECUTE sp_refreshsqlmodule @name;
END;
...