SQL Server语言 - 临时表 - 仅限所选列



我最近从事的一个项目的要求之一是将数据库表数据的历史记录作为审计跟踪的一部分进行维护。我对技术解决方案的第一个想法是使用触发器,但经过一些研究,我了解了 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(上创建临时表,我希望仅在更改电话号码而不是名字和姓氏时将数据插入临时表中。

不幸的是,这不是它的工作方式。就像您帖子中的链接所说,"系统版本控制是全有或全无的"。老实说,您的第一直觉可能是您的最佳选择 - 所有其他方法(CDC,复制,系统版本控制等(都会捕获比您想要的更多的数据,并且您将不得不在事后削减结果。

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

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

您可以为想要历史记录的属性创建一个表(您将设置system_versioning = ON(,并使用不需要历史记录的属性创建第二个表。在两个表之间,您将具有 1 对 1 的关系。

最新更新