Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server-时态表-仅选定列_Sql Server_Temporal Tables - Fatal编程技术网

Sql server SQL Server-时态表-仅选定列

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

我最近参与的一个项目的需求之一是维护数据库表数据的历史记录,作为审计跟踪的一部分。我最初想到的技术解决方案是使用触发器,但经过一些研究,我了解了SQL Server时态表(核心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、复制、系统版本控制……)都会捕获比你想要的更多的数据,而且你必须在事后缩减结果

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


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

您可以为需要历史记录的属性创建一个表(您将设置
system\u versioning=ON
),并为不需要历史记录的属性创建第二个表。在这两个表之间,您将有一个1对1的关系。

谢谢IsItGreyOrGray。这很有帮助,我希望SQL有更好的集成方法来实现这一点。