SQL Server时态表不保留删除历史记录以进行事务中的更新和删除

时间:2018-07-21 14:40:56

标签: sql-server temporal

我有一个SQL Server时态表“ person”,其记录如下:

name      | modified_by
-------------------------
John      | 1

如果我执行以下sql语句

update person set modified_by = 2 where name = 'John'
delete from person where name = 'John'

我在历史记录表中看到两条记录,它们分别具有Modifyed_by = 1和2。

如果我在交易中执行了两条语句

begin transaction
  update person set modified_by = 2 where name = 'John'
  delete from person where name = 'John'
commit transaction

我在历史记录表中只看到一条记录,其Modifyed_by = 1

这是预期的行为吗?为什么?

1 个答案:

答案 0 :(得分:0)

是的,这是预期的。

事务中的所有语句要么完全执行,要么根本不执行。没有中间步骤。

在您的示例中,由于始终会删除相关行,因此update语句浪费资源。

但是,没有事务的情况下,您的第一条语句将导致表的三个一致性状态:在第一个语句之前,在更新之后和在删除之后。