Сравнение и синхронизация представлений и встроенных функций баз данных SQL Server

Views & Inline Functions

Сравнивать и синхронизировать Views & Inline Functions.

Параметры сравнения и синхронизации представлений и встроенных функций баз данных SQL Server, включая пересоздание всех представлений, контроль ANSI_NULLS, обновление метаданных с помощью sp_refreshview и sp_refreshsqlmodule на основе зависимостей между объектами структуры
Создавать

Создавать новые, если их нет в целевой базе данных.

Перестраивать

Перестраивать (удалить и создать) существующие, чтобы устранить отличия.

Удалять

Удалять существующие, если их нет в шаблонной базе данных.

Пересоздавать все

Пересоздавать все объекты данного типа в целевой базе данных.

ANSI_NULLS

Если эта опция не установлена, то алгоритм сравнения будет игнорировать параметр ANSI_NULLS для views. Настоятельно рекомендуется всегда использовать эту опцию в сравнении.

Добавлять обновление Views & Inline Functions

Добавлять в скрипт синхронизации специальный алгоритм для обновления Views & Inline Functions в требуемом порядке.

Параметры обновления метаданных представлений и встроенных функций баз данных SQL Server путем вызова sp_refreshview и sp_refreshsqlmodule
Обновлять по измененным зависимостям

Обновлять все объекты, которые ссылаются на измененные или перестроенные объекты с момента выполнения подготовительного скрипта.

Обновлять по просроченным зависимостям

Обновлять все объекты, которые ссылаются на другие объекты с более новой датой изменения.

Все

Обновлять все объекты.


Обновление метаданных с помощью 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;
...