2

我最近从事的一个项目的要求之一是维护数据库表数据的历史记录,作为审计跟踪的一部分。我首先想到的技术解决方案是使用触发器,但经过一些研究后,我了解了 SQL Server 时态表(核心 SQL Server 2016 的一部分)。我围绕这个做了很多研究,发现临时表可以很好地利用。

有关时态表的更多信息:在 SQL Server 2016 中管理时态表历史记录

但是,我希望仅在更改少数列时创建临时表中的数据。

CREATE TABLE dbo.Persons
(
  ID BIGINT IDENTITY(1,1) NOT NULL,
  FirstName NVARCHAR(50) NOT NULL,
  LastName NVARCHAR(50),
  PhoneNumber NVARCHAR(20)
)

现在,如果我在此之上创建临时表(SYSTEM_VERSIONING = On),我希望仅在更改电话号码而不是名字和姓氏时才将数据插入临时表中。

4

2 回答 2

2

不幸的是,这不是它的工作方式。就像您帖子中的链接所说,“系统版本控制是全有或全无”。老实说,你的第一直觉可能是你最好的选择——所有其他方法(CDC、复制、系统版本控制……)都会捕获比你想要的更多的数据,而且你必须在事后削减结果。

如果您真的想使用系统版本控制,您只需使用提供的链接中提供的选项之一:删除不需要的行和/或将不需要的列更新为 NULL 值。

我会推荐你​​的第一直觉,并使用触发器来实现类似于类型 4 缓慢变化维度的东西。这是获取所需特定数据的最直接方法。

于 2018-09-25T13:36:57.027 回答
0

您可以为您想要历史的属性创建一个表(并且您将设置system_versioning = ON),并为您不想要历史的属性创建第二个表。在两张表之间,您将拥有一对一的关系。

于 2021-04-26T07:40:07.067 回答