SQL Server-临时表-仅所选列

时间:2018-09-25 11:36:29

标签: sql-server temporal-tables

我正在从事的最近项目的要求之一是,维护数据库表数据的历史记录作为审计跟踪的一部分。我最初对技术解决方案的想法是使用触发器,但经过一些研究,我了解了SQL Server时态表(核心SQL Server 2016的一部分)。我对此进行了大量研究,发现可以很好地使用时态表。

有关时态表的更多信息:Managing Temporal Table History in 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),我希望仅当更改电话号码而不是名字和姓氏时,才将数据插入到时态表中。

2 个答案:

答案 0 :(得分:1)

不幸的是,这不是它的工作方式。就像您帖子中的链接所说的那样,“系统版本控制是全有还是全无”。老实说,您的第一个直觉可能是您的最佳选择-进行此操作的所有其他方法(CDC,复制,系统版本控制..)将捕获比您想要的更多的数据,并且您必须在事后减少结果。

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

我建议您使用第一个本能,并使用触发器来实现类似类型4缓慢变化的维度。这是获取所需特定数据的最直接方法。

答案 1 :(得分:0)

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