原文

Temporal Table是SQL Server2016的新特性。能存储你表里面任意时间点的数据信息。 换句话说,如果你针对一张表执行任何更新或者删除操作,老数据会被新数据覆盖,下次查询的时候是查的最新的数据,但如果使用了temporal table你可以查询到任意时间点的数据。

Temporal table是如何工作的呢?

当你往Temporal table插入记录的时候会发生什么?

当你往temporal table插入数据的时候,数据会留在temporal table中,但是不会影响history table。

当你更新或者删除Temporal table的数据时会发生什么?

当你更新或者删除Temporal table的数据时,已存在的记录会先被移动到history table中,记录temporal table数据的改变。

当你查询Temporal table的时候会发生什么?

当你查询temporal table的时候, temporal table会自己决定是从temporal table中还是从history table中返回数据,你不应该使用任何join关联temporal table和history table进行查询。

创建Temporal Table

创建temporal table时,其对应的history table会自动创建(如果你已经有了一个history table,你可以将他和temporal table关联起来)。下面是一个普通的创建表的脚本,但是有些额外特殊的列。这些列用来定义temporal table的period definition,并且这些列是隐藏的。当你查询的时候这些列不会出现在结果集中。脚本中还将history table名指定为“dbo.tbl_Product_History”。当然你也可以不声明history table的名字,SQL会自动为temporal table创建一个默认的history table。

CREATE DATABASE SampleDB
GO
USE SampleDB
GO
--DROP TABLE tbl_Product
--GO
CREATE TABLE tbl_Product
(Product_ID int NOT NULL PRIMARY KEY CLUSTERED,Product_Name varchar(50) NOT NULL,Rate numeric(18,2),/*Temporal Specific Fields - Period Definition */[Valid From] datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,[Valid Till] datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,PERIOD FOR SYSTEM_TIME ([Valid From] ,[Valid Till])
)
WITH
/* Temporal Specific - System-Versioning Configuration*/
(SYSTEM_VERSIONING = ON(HISTORY_TABLE = dbo.tbl_Product_History, DATA_CONSISTENCY_CHECK = ON)
);
GO

执行insert

之前说过,当你对一个temporal table执行insert语句,不会影响history table。下面我们执行insert,然后看看相应的结果。

USE SampleDB
GO
INSERT INTO dbo.tbl_Product VALUES(1,'Product A', 300)
,(2,'Product B', 400)
GOSELECT * FROM tbl_Product
GO
SELECT * FROM dbo.tbl_Product_History
GO

执行update

当你对一个temporal table执行update语句,老数据会被移到history table中,temporal table会保存最新的数据。下面我们执行update,然后看看相应的结果。

USE SampleDB
GO
UPDATE tbl_Product SET Rate =Rate/2
WHERE Product_ID IN (1,2)
GOSELECT * FROM tbl_Product
GO
SELECT * FROM dbo.tbl_Product_History
GO

执行delete

当你对一个temporal table执行delete语句,老数据会被移到history table中,temporal table会保存最新的数据。下面我们执行delete,然后看看相应的结果。

USE SampleDB
GO
DELETE FROM tbl_Product WHERE Product_ID = 2
GOSELECT * FROM tbl_Product
GO
SELECT * FROM dbo.tbl_Product_History
GO

执行select

在temporal table中执行select非常有意思。

下面的脚本和正常的table一样返回table最新的结果集:

USE SampleDB
GO
--Current State of the table
SELECT * FROM tbl_Product
GO

下面使用FOR SYSTEM_TIME ‘2015-06-27 21:33:50.9002439’来查询temporal table,这将返回这个表在‘2015-06-27 21:33:50.9002439’ 时的状态。

USE SampleDB
GO
SELECT * FROM tbl_Product
FOR SYSTEM_TIME AS OF '2015-06-27 21:33:50.9002439'
GO

下面使用FOR SYSTEM_TIME at ‘2015-06-27 21:43:31.2982847’来查询temporal table,这将返回这个表在‘2015-06-27 21:43:31.2982847’时的状态。

USE SampleDB
GO
SELECT * FROM tbl_Product
FOR SYSTEM_TIME AS OF '2015-06-27 21:43:31.2982847'
GO

总结

有了temporal table,将改变我们为数据仓库设计数据库的方式。因为我们不需要创建一个独立的audit表通过触发器或者存储过程记录数据的变化,temporal table自动为我们完成了这些工作。

转载于:https://www.cnblogs.com/irocker/p/sql-server-2016-temporal-tables.html

[译]SQL SERVER 2016 – Temporal Tables相关推荐

  1. sql 数据库检查_数据库检查点– SQL Server 2016中的增强功能

    sql 数据库检查 When a new row is inserted or an existing one is updated in your database, the SQL Server ...

  2. 新SQL Server 2016示例数据库

    背景 (Background) We have all learned to love and hate the trusty Bike shop database. Almost every dem ...

  3. SQL Server 2016的新功能–临时数据表

    There are many new features in SQL Server 2016, but the one we will focus on in this post is: SQL Se ...

  4. sql 如何设置行级锁_如何使用SQL Server 2016行级安全性过滤和阻止数据访问

    sql 如何设置行级锁 SQL Server 2016 came with many new features and enhancements for existing ones, that con ...

  5. sql 时态表的意义_在SQL Server 2016中拉伸时态历史记录表

    sql 时态表的意义 背景 (Background) With the release of Microsoft SQL Server 2016 a lot of new features were ...

  6. 15支持哪些数据库版本 tfs_版本和支持的功能 - SQL Server 2016 | Microsoft Docs

    SQL Server 2016 的各版本和支持的功能Editions and supported features of SQL Server 2016 07/22/2020 本文内容 适用于:App ...

  7. SQL Server 2016 列存储技术做实时分析

    title: SQL Server 2016 列存储技术做实时分析 author: 风移 摘要 数据分析指导商业行为的价值越来越高,使得用户对数据实时分析的要求变得越来越高.使用传统RDBMS数据分析 ...

  8. SQL Server 2016 JSON原生支持实例说明

    原文:SQL Server 2016 JSON原生支持实例说明 背景 Microsoft SQL Server 对于数据平台的开发者来说越来越友好.比如已经原生支持XML很多年了,在这个趋势下,如今也 ...

  9. SQL Server 2016 – PolyBase教程

    介绍 (Introduction) This article will teach you how to install PolyBase and will show you a simple exa ...

最新文章

  1. Ubuntu login as root automatically
  2. html 判断页面支持canvas,HTML5 Canvas之测试浏览器是否支持Canvas的方法
  3. applicaiton.yml 日志配置_底层基于Apache Hudi的DLA最佳实践 海量、低成本日志分析...
  4. ros学习(1)工作空间创建和功能包
  5. 计算机里的网络是什么意思啊,计算机网络中本地站点是什么意思
  6. 笔记本上的小键盘计算机怎样用,笔记本数字小键盘不能用怎么办【解决方法】...
  7. 一文通览支持CAN FD的Kvaser CAN/LIN总线
  8. Shapley_Value全解析与公式推导
  9. 云购系统、一元云购系统接入短信验证及订单通知功能
  10. 程序员在线写诗《寒江雪》
  11. 软工网络15团队作业4——Alpha阶段敏捷冲刺之Scrum 冲刺博客(Day8)
  12. torch.nn.MSELoss的用法
  13. eclipse IED的优化(gc.log)
  14. android 程序闪退 log,应用闪退log日志。。
  15. 小澳的葫芦(最短路)
  16. 解决win10只有IE可以上网,其他浏览器都无法连接网络
  17. Python OpenCV crosscheck交叉特征点出现错误解决办法
  18. v5行为验证使用介绍(三)- 程序接入流程
  19. 非线性悬架matlab,基于MATLAB/Simulink的油气悬架非线性阻尼特性分析
  20. 新手小白可做的22个Python迷你项目(附源码),建议收藏练习

热门文章

  1. VC程序员常用工具篇
  2. 为Mac安装homebrew
  3. mount: unknown filesystem type 'LVM2_member'解决方案
  4. frameworks/av/media/CedarX-Projects/CedarAndroidLib/LIB_KK44_/Android.mk: No such file or directory
  5. [Redux/Mobx] 在redux中,什么是action?
  6. React开发(212):react中高阶组件转发refs
  7. [vue] 说说你对proxy的理解
  8. [js] 说说你对js对象生命周期的理解
  9. 前端学习(2768):上拉加载
  10. 前端学习(2701):重读vue电商网站22之如何重定向路由