临时表在没有时记录更改吗?

Jef*_*eff 9 sql-server temporal-tables sql-server-2016

不幸的是,我没有准备好访问 SQL 2016 实例来测试这个。如果我有一个具有以下架构的时态表:

create table blah (
    foo int identity(1,1),
    baa int
)
Run Code Online (Sandbox Code Playgroud)

我要运行以下语句:

update blah set baa = baa
Run Code Online (Sandbox Code Playgroud)

它会像我实际更新数据一样记录更改吗?

我已经查看了MSDN 文章中的临时表修改数据的文章,但在那里找不到任何指定此内容的内容。

Kin*_*hah 10

将我的评论转换为回答..

如果该值实际更新,则它将记录更改。如果您更新相同的值,将记录每一行的新版本,但列值将保持不变。

以下是工作示例:

CREATE TABLE dbo.blah1
    -- PK is a requirement !!
    (
    foo INT identity(1, 1) PRIMARY KEY
    ,baa INT
    ,SysStartTime DATETIME2 GENERATED ALWAYS AS ROW START NOT NULL
    ,SysEndTime DATETIME2 GENERATED ALWAYS AS ROW END NOT NULL
    ,PERIOD FOR SYSTEM_TIME(SysStartTime, SysEndTime)
    )
    WITH (SYSTEM_VERSIONING = ON);

-- insert data
insert into dbo.blah (baa)
values (1)
Run Code Online (Sandbox Code Playgroud)

现在检查数据

-- check data
    SELECT * FROM  dbo.blah;
    select * from [dbo].[MSSQL_TemporalHistoryFor_629577281]
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

执行虚拟更新

update blah 
set baa = baa
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

执行一次虚拟更新......会有具有相同值但不同系统时间的行 - 开始和结束。

在此处输入图片说明

你必须有一个适当的机制来清理历史表,因为如果你忘记修剪它,它会变得更大。