Я знаю, что этот вопрос довольно старый, но с SQL Server 2016 , Temporal Tables - это особенность:
https://docs.microsoft.com/en-us/sql/relational-databases/tables/temporal-tables
Может быть, это может помочь другим, если они зайдут в эту тему (Поиск чего-то похожего на функцию Oracle Flashback)
С включенными временными таблицами вы можете запросить таблицу AS OF определенной временной отметки и извлечь строки, как они были в этой конкретной временной отметке, точно так же, как вы использовали в Oracle:
(SELECT * FROM EMPLOYEE AS OF TIMESTAMP ('13-SEP-04 8:50:58','DD-MON-YY HH24: MI: SS')
Эквивалентный запрос в SQL Server для таблицы с SYSTEM_VERSIONING = ON будет:
SELECT * FROM EMPLOYEE FOR SYSTEM_TIME AS OF '2004-09-01 08:50:58'
Чтобы включить SYSTEM_VERSIONING для существующей таблицы со строками, вы можете использовать следующий скрипт :
ALTER TABLE [dbo].[TABLE] ADD [SysStartTime] datetime2(0) GENERATED ALWAYS AS ROW START HIDDEN NOT NULL CONSTRAINT DF_Inventory_SysStartTime DEFAULT '1900-01-01 00:00:00', [SysEndTime] datetime2(0) GENERATED ALWAYS AS ROW END HIDDEN NOT NULL CONSTRAINT DF_Inventory_SysEndTime DEFAULT '9999-12-31 23:59:59', PERIOD FOR SYSTEM_TIME ([SysStartTime], [SysEndTime])
ALTER TABLE [dbo].[TABLE] SET (SYSTEM_VERSIONING = ON);
После включения SYSTEM_VERSIONING таблица истории будет отображаться под таблицей, в которой вы включили управление версиями:
![enter image description here](https://i.stack.imgur.com/z36dY.png)
Чтобы удалить SYSTEM_VERSIONING из таблицы:
ALTER TABLE [dbo].[TABLE] SET (SYSTEM_VERSIONING = OFF);
ALTER TABLE [dbo].[TABLE] DROP PERIOD FOR SYSTEM_TIME;
ALTER TABLE [dbo].[TABLE] DROP COLUMN [SysStartTime], [SysEndTime];
Для получения дополнительной информации вы можете посетить следующую ссылку (или официальную документацию Microsoft, на которую ссылались ранее):
http://www.sqlservercentral.com/articles/SQL+Server+2016/147087/