Sql server SQL Server-时态表-仅选定列
我最近参与的一个项目的需求之一是维护数据库表数据的历史记录,作为审计跟踪的一部分。我最初想到的技术解决方案是使用触发器,但经过一些研究,我了解了SQL Server时态表(核心SQL Server 2016的一部分)。我在这方面做了很多研究,发现时态表可以很好地使用 有关时态表的更多信息: 但是,我希望时态表中的数据只在少数列发生更改时创建Sql server SQL Server-时态表-仅选定列,sql-server,temporal-tables,Sql Server,Temporal Tables,我最近参与的一个项目的需求之一是维护数据库表数据的历史记录,作为审计跟踪的一部分。我最初想到的技术解决方案是使用触发器,但经过一些研究,我了解了SQL Server时态表(核心SQL Server 2016的一部分)。我在这方面做了很多研究,发现时态表可以很好地使用 有关时态表的更多信息: 但是,我希望时态表中的数据只在少数列发生更改时创建 CREATE TABLE dbo.Persons ( ID BIGINT IDENTITY(1,1) NOT NULL, FirstName NVA
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、复制、系统版本控制……)都会捕获比你想要的更多的数据,而且你必须在事后缩减结果 如果您真的想使用系统版本控制,您只需要使用提供的链接中提供的选项之一:删除不需要的行和/或将不需要的列更新为空值
我建议你按照你的第一直觉,使用触发器来实现类似类型4的缓慢变化维度。这是获取所需特定数据的最直接的方法。您可以为需要历史记录的属性创建一个表(您将设置
system\u versioning=ON
),并为不需要历史记录的属性创建第二个表。在这两个表之间,您将有一个1对1的关系。谢谢IsItGreyOrGray。这很有帮助,我希望SQL有更好的集成方法来实现这一点。