Синхронизация данных между временными таблицами в SQL Server - PullRequest
0 голосов
/ 03 июля 2019

Я хочу синхронизировать данные между двумя базами данных, которые имеют системные версии (временные) таблицы. Параметр синхронизации данных в Azure не поддерживает временные таблицы, и мне нужно найти другой способ синхронизации между базами данных.

Я хочу скопировать данные из одной временной таблицы в другую временную таблицу другой базы данных, используя фабрику данных Azure. Будет ли фабрика данных Azure поддерживать синхронизацию данных между временными таблицами?

Каков наилучший способ синхронизации данных между двумя базами данных, которые имеют идентичные временные таблицы?

1 Ответ

1 голос
/ 03 июля 2019

Я создал системную версию (временную) таблицу в своей базе данных SQL Azure, следуя этому документу Создание временной таблицы :

CREATE TABLE Department   
(    
     DeptID int NOT NULL PRIMARY KEY CLUSTERED  
   , DeptName varchar(50) NOT NULL  
   , ManagerID INT  NULL  
   , ParentDeptID int NULL  
   , SysStartTime datetime2 GENERATED ALWAYS AS ROW START NOT NULL  
   , SysEndTime datetime2 GENERATED ALWAYS AS ROW END NOT NULL  
   , PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime)     
)   
WITH    
   (   
      SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.DepartmentHistory)   
   )   
;

Я создал две временные таблицы Department и Department2 на разных серверах Azure SQL.

Я тестирую в активной копии фабрики данных, выбираю Отдел в качестве исходного набора данных, мы видим временную таблицу из настроек: enter image description here

Выберите Department2 в качестве набора данных ссылок, отображение таблиц :: enter image description here

Отображение столбцов: enter image description here

Активный запуск выполнен успешно: enter image description here

Это означает, что Azure Data Factory поддерживает копирование данных из одной временной таблицы в другую временную таблицу другой базы данных.

Обновление:

Пожалуйста, обратитесь к этому документу: Временные таблицы в SQL Server 2016 - Часть III .

Теперь, начиная с INSERT, помните, что во временной таблице есть два специальных столбца datetime2, объявленных как GENERATED ВСЕГДА КАК START / END. Это столбцы PERIOD, и они являются обязательными, но вы не можете вставить явное значение в столбец GENERATED ALWAYS. Его значения будут автоматически заполнены. Когда вы вставляете новую строку в таблицу, столбец «ROW START» будет иметь значение SYSUTCDATETIME () (да, не забудьте, что время UTC!), А столбец «ROW END» будет иметь значение: «9999 -12-31 23: 59: 59.9999999 ' По сути, при вставке новой строки во временную таблицу, касающуюся этих двух столбцов, вы можете использовать следующие параметры: 1. Используйте список столбцов и пропустите эти два столбца; 2. Используйте список столбцов, не пропуская эти два столбца, и укажите DEFAULT в списке значений для каждого. 3. Не используйте список столбцов и укажите DEFAULT в списке значений для каждого.

Поздравляю, ошибку решили самостоятельно:

  1. Загрузка таблиц после отключения контроля версий в таблице назначения, и это сработало.

ALTER TABLE [dbo].[Department] SET(SYSTEM_VERSIONING = OFF); ALTER TABLE [dbo].[Department] DROP PERIOD FOR SYSTEM_TIME;

  1. Затем, после того как копия активна, переключите ее обратно.
ALTER TABLE [dbo].[Department] ADD PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime); ALTER TABLE [dbo].[Department] SET(SYSTEM_VERSIONING = ON);

Надеюсь, это поможет.

...