首页 > 解决方案 > 仅保留差异的 SQL Server 表

问题描述

我有一个小任务是在 SQL Server 中创建只保留差异的日志表,因为我每秒都要记录流数据,而且大多数时候,差异会很小。[DateIndex] 并更改 1 列值。

例子:

DateIndex C1 C2  C3 C4 C5 C6 C7
---------------------------------
1         1   2  3  4  5  6  7.0
2         1   2  3  0  5  6  7.1
3         1   0  3  4  5  6  7.3

有没有办法让表格只写下差异,而不是整行?

标签: sql-serverloggingdatatablesbigdata

解决方案


根据您的要求和 SQL Server 版本,这听起来像是SQL Server 2008 及更高版本中可用的变更数据捕获(CDC) 或SQL Server 2016 及更高版本中可用的临时表的工作。

CDC 使用事务日志来捕获系统生成的更改日志表(位于数据库的系统表区域)中的插入、更新和删除,并在可配置的时间段内保留数据。默认值为三天,但您可以将其设置为适合您需要的时间长短。该表包含所有插入、所有删除以及更新前后的快照。

使用时态表,会在数据库的主表区域中创建历史表。主时态表包含数据的当前状态,历史表包含所有更改。时态表使您能够编写一个查询,该查询将返回某个时间点存在的数据。但是,它在开箱即用的时间开始存储数据,因此在高流量应用程序中可能会占用一些存储空间。

在开始自己动手解决方案的道路之前,我会先调查一下。


推荐阅读