SQL Server 2016 - System_Versioned table - воссоздать существующую таблицу со значимыми полями SysStartTime и SysEndTime
У нас есть две таблицы, Events
а также EventsLog
, Events
таблица показана ниже
EventsLog
таблица используется для хранения истории изменений, внесенных в Events
таблица с помощью триггера на UPDATE в Events
Таблица.
Поскольку временные таблицы были добавлены в SQL 2016, теперь мы хотим использовать system_versioning, чтобы вести журнал наших изменений в Events
Таблица.
Мы создали новую EventsTemporal
таблица для миграции по существующим данным и тому EventsTemporal_History
таблица работает хорошо, ведение журнала исторических записей из EventsTemporal
Однако мы не можем переопределить SysStartTime
а также SysEndTime
, В настоящее время мы можем только подать заявку default
в эти поля при выполнении оператора INSERT.
Вопрос, используя любой возможный метод, можем ли мы переопределить SysStartTime
а также SysEndTime
поля, чтобы мы могли вставить значимые datetime2
в них, чтобы использовать EventsTemporal_History
Таблица?
Это в настоящее время, как EventsTemporal
таблица выглядит. Обратите внимание на SysStartTime
поле, мы хотим иметь возможность заполнять эти поля нашей собственной "отметкой времени" и не использовать SQL по умолчанию.
В идеале мы хотим иметь возможность заполнять эти поля, как показано ниже.
1 ответ
Отключить SYSTEM_VERSIONING для EventsTemporal.
ALTER TABLE EventsTemporal SET ( SYSTEM_VERSIONING = OFF );
Обновите EventsTmeporal как обычную таблицу.
UPDATE D SET D.SysStartDate = S.EventDate FROM dbo.EventsTemporal AS D INNER JOIN dbo.Events AS S ON D.EventId = S.EventId;
Включить SYSTEM_VERSIONING для EventTemporal;
ALTER TABLE dbo.EventsTemporal ADD PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime); ALTER TABLE dbo.EventsTemporal ALTER COLUMN SysStartTime ADD HIDDEN; ALTER TABLE dbo.EventsTemporal ALTER COLUMN SysEndTime ADD HIDDEN; ALTER TABLE dbo.EventsTemporal SET ( SYSTEM_VERSIONING = ON ( HISTORY_TABLE = dbo.EventsTemporal_History ) );