Порівняння і синхронізація views та inline-функцій баз даних SQL Server

Параметри порівняння і синхронізації views та inline-функцій баз даних SQL Server, включно з перебудовою всіх views, контролем ANSI_NULLS, оновленням метаданих за допомогою sp_refreshview і sp_refreshsqlmodule на основі залежностей між об'єктами структури

Views & Inline Functions

Порівнювати і синхронізувати Views & Inline Functions.

Створювати

Створювати нові, якщо вони не існують в цільовій базі даних.

Перестворювати

Перестворювати (видалити і створити) існуючі аби усунути відмінності.

Видаляти

Видаляти існуючі, якщо їх немає в шаблонній базі даних.

Перестворити Всі

Перестворювати всі об’єкти даного типу в цільовій базі даних.

ANSI_NULLS

Якщо ця опція не встановлена, алгоритм порівняння буде ігнорувати властивість ANSI_NULLS views при порівнянні, однак, коли view перестворюється через інші відмінності, буде взяте нове значення.

Параметри оновлення метаданих views та inline-функцій баз даних SQL Server шляхом виклику sp_refreshview і sp_refreshsqlmodule

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

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

Оновлювати за зміненими залежностями

Оновлювати всі об’єкти, які посилаються на змінені або перестворені об’єкти з моменту виконання підготовчого скрипту.

Оновлювати за простроченими залежностями

Оновлювати всі об’єкти, які посилаються на інші об’єкти з більш новою датою модифікації.

Всі

Оновлювати всі об’єкти.


Оновлення метаданих за допомогою sp_refreshview і sp_refreshsqlmodule

Кінцевий етап синхронізації структури бази даних - це оновлення метаданих views та inline-функцій. Нижче наведена частина алгоритму, який здійснює оновлення views та inline-функцій ітераційним способом в необхідному порядку на основі залежностей між об'єктами.

Тип алгоритму визначається встановленими опціями в налаштуванні Додавати оновлення 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;
...