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

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

Views & Inline Functions

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

Создавать

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

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

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

Удалять

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

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

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

ANSI_NULLS

Если эта опция не установлена, алгоритм сравнения будет игнорировать свойство ANSI_NULLS views при сравнении, однако, если view пересоздается из-за других различий, будет принято новое значение.

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

Добавлять обновление 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;
...