MyI*_*hin 5

没有.SQL Server没有等效功能.

  • @Vérace-Daniel的答案是针对SQL 2016的,此问题在2009年被提出。因此,在提出/回答问题时,它是正确的。 (2认同)

Dan*_*iel 5

我知道这个问题已经很老了,但是对于SQL Server 2016,Temporal Tables 是一个功能:https : //docs.microsoft.com/en-us/sql/relational-databases/tables/temporal-tables

也许它可以帮助其他人,以防他们来到这个主题(搜索类似于 Oracle 闪回特性的东西)

启用时态表后,您可以查询表 AS OF 特定时间戳并检索该特定时间戳中的行,就像您在 Oracle 中所做的那样:

(SELECT * FROM EMPLOYEE AS OF TIMESTAMP ('13-SEP-04 8:50:58','DD-MON-YY HH24: MI: SS')
Run Code Online (Sandbox Code Playgroud)

SQL Server 中 SYSTEM_VERSIONING=ON 表的等效查询将是:

SELECT * FROM EMPLOYEE FOR SYSTEM_TIME AS OF '2004-09-01 08:50:58'
Run Code Online (Sandbox Code Playgroud)

要为包含行的现有表启用 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); 
Run Code Online (Sandbox Code Playgroud)

启用 SYSTEM_VERSIONING 后,历史记录表将显示在您启用版本控制的表下:

在此处输入图片说明

从表中删除 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]; 
Run Code Online (Sandbox Code Playgroud)

有关更多信息,您可以访问以下链接(或之前引用的 Microsoft 官方文档):http : //www.sqlservercentral.com/articles/SQL+Server+2016/147087/