日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

[译]SQL SERVER 2016 – Temporal Tables

發(fā)布時(shí)間:2023/12/10 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [译]SQL SERVER 2016 – Temporal Tables 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文

Temporal Table是SQL Server2016的新特性。能存儲(chǔ)你表里面任意時(shí)間點(diǎn)的數(shù)據(jù)信息。 換句話說,如果你針對(duì)一張表執(zhí)行任何更新或者刪除操作,老數(shù)據(jù)會(huì)被新數(shù)據(jù)覆蓋,下次查詢的時(shí)候是查的最新的數(shù)據(jù),但如果使用了temporal table你可以查詢到任意時(shí)間點(diǎn)的數(shù)據(jù)。

Temporal table是如何工作的呢?

當(dāng)你往Temporal table插入記錄的時(shí)候會(huì)發(fā)生什么?

當(dāng)你往temporal table插入數(shù)據(jù)的時(shí)候,數(shù)據(jù)會(huì)留在temporal table中,但是不會(huì)影響history table。

當(dāng)你更新或者刪除Temporal table的數(shù)據(jù)時(shí)會(huì)發(fā)生什么?

當(dāng)你更新或者刪除Temporal table的數(shù)據(jù)時(shí),已存在的記錄會(huì)先被移動(dòng)到history table中,記錄temporal table數(shù)據(jù)的改變。

當(dāng)你查詢Temporal table的時(shí)候會(huì)發(fā)生什么?

當(dāng)你查詢temporal table的時(shí)候, temporal table會(huì)自己決定是從temporal table中還是從history table中返回?cái)?shù)據(jù),你不應(yīng)該使用任何join關(guān)聯(lián)temporal table和history table進(jìn)行查詢。

創(chuàng)建Temporal Table

創(chuàng)建temporal table時(shí),其對(duì)應(yīng)的history table會(huì)自動(dòng)創(chuàng)建(如果你已經(jīng)有了一個(gè)history table,你可以將他和temporal table關(guān)聯(lián)起來)。下面是一個(gè)普通的創(chuàng)建表的腳本,但是有些額外特殊的列。這些列用來定義temporal table的period definition,并且這些列是隱藏的。當(dāng)你查詢的時(shí)候這些列不會(huì)出現(xiàn)在結(jié)果集中。腳本中還將history table名指定為“dbo.tbl_Product_History”。當(dāng)然你也可以不聲明history table的名字,SQL會(huì)自動(dòng)為temporal table創(chuàng)建一個(gè)默認(rèn)的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

執(zhí)行insert

之前說過,當(dāng)你對(duì)一個(gè)temporal table執(zhí)行insert語句,不會(huì)影響history table。下面我們執(zhí)行insert,然后看看相應(yīng)的結(jié)果。

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

執(zhí)行update

當(dāng)你對(duì)一個(gè)temporal table執(zhí)行update語句,老數(shù)據(jù)會(huì)被移到history table中,temporal table會(huì)保存最新的數(shù)據(jù)。下面我們執(zhí)行update,然后看看相應(yīng)的結(jié)果。

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

執(zhí)行delete

當(dāng)你對(duì)一個(gè)temporal table執(zhí)行delete語句,老數(shù)據(jù)會(huì)被移到history table中,temporal table會(huì)保存最新的數(shù)據(jù)。下面我們執(zhí)行delete,然后看看相應(yīng)的結(jié)果。

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

執(zhí)行select

在temporal table中執(zhí)行select非常有意思。

下面的腳本和正常的table一樣返回table最新的結(jié)果集:

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,這將返回這個(gè)表在‘2015-06-27 21:33:50.9002439’ 時(shí)的狀態(tài)。

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,這將返回這個(gè)表在‘2015-06-27 21:43:31.2982847’時(shí)的狀態(tài)。

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

總結(jié)

有了temporal table,將改變我們?yōu)閿?shù)據(jù)倉庫設(shè)計(jì)數(shù)據(jù)庫的方式。因?yàn)槲覀儾恍枰獎(jiǎng)?chuàng)建一個(gè)獨(dú)立的audit表通過觸發(fā)器或者存儲(chǔ)過程記錄數(shù)據(jù)的變化,temporal table自動(dòng)為我們完成了這些工作。

轉(zhuǎn)載于:https://www.cnblogs.com/irocker/p/sql-server-2016-temporal-tables.html

總結(jié)

以上是生活随笔為你收集整理的[译]SQL SERVER 2016 – Temporal Tables的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。