我有一个小任务要在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 Server版本,这听起来像是SQL Server 2008及更高版本中提供的变更数据捕获(CDC(或SQL Server 2016及更高版中提供的临时表的工作。
CDC使用事务日志在数据库的"系统表"区域中捕获系统生成的更改日志表中的插入、更新和删除,并在可配置的时间段内保留数据。默认为三天,但您可以根据需要将其设置为最长或最短的时间。该表包含所有插入、所有删除以及用于更新的前后快照。
使用时态表,将在数据库的主表区域中创建History表。主临时表包含数据的当前状态,历史表包含所有更改。时态表使您能够编写一个查询,该查询将返回某个时间点存在的数据。不过,它在开箱即用的时间开始时存储数据,因此在高流量应用程序中可能有点存储密集型。
在开始自己的解决方案之前,我会先研究两者。
否,但如果您想将CURRENT数据实际写入表中,则可以通过触发器自动生成delta。不过,还是要把它们写在一张合适的桌子上,这是不可能的。