SQL Server保存表的当前状态以进行报告[关闭]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server保存表的当前状态以进行报告[关闭]相关的知识,希望对你有一定的参考价值。
我们目前有一个报表,用于管理每个销售人员的销售额,该销售人员组合了所有类型的销售(下面的ReportTable示例)。此报告表经常由后端流程填充,以跟踪销售人员的总销售额。
我们现在面临的问题是,销售人员希望能够在某个日期“冻结”他们的报告,以确保他们拥有所有销售的库存,然后在他们赶上时“解冻”。这意味着当报告被冻结时,我们需要一种方法来捕获销售人员销售的当前状态,以便我们可以根据这些数字提供不同的报告。
不幸的是,我们仍然需要报告表是最新的,因为销售人员仍需要查看更新收入以确保客户付费(因为我们有在线和离线销售)。
ReportTable
int SalesPersonId,
int SaleType,
decimal SaleTotal,
decimal PaymentsOwed,
int CustomerId,
int OrderRegion
桌面上的两个想法似乎都不是最好的做法:
- 在冻结报告时,将每个销售人员的数据复制到报告表中,然后只查询复制表。这里的一个缺点是,一个完整的重复数据表,我不知道将表复制到完全相同类型的另一个表需要多长时间。
- 每次修改此报告表时创建一个新行,以跟踪销售人员冻结其报告之前/之后修改的行。这将增加报告查询以及每次销售时网站的复杂性。
有没有人建议在这里采用更好的方法或者使用上述2个建议中的任何一个?
这是Temporal Table用例的完美示例。
系统版本的时态表是一种用户表,旨在保持数据更改的完整历史记录,并允许简单的时间点分析。这种类型的时态表被称为系统版本的时间表,因为每行的有效期由系统(即数据库引擎)管理。
创建时态表时,系统会创建两个对象(嗯,两个直接相关);基表和相应的历史表。插入,更新和删除在基表上生效,相应的“之前”图像存储在历史表中。您可以针对包含AS OF <datetime>
子句的表编写查询,以查看某个时间点的数据。
SQL Server版本2016及更高版本中提供了时态表。
编辑:为了避免长时间保留历史记录(我们大多数人不想要或不需要),有许多选项可用于修剪历史记录表。微软向Manage Retention of Historical Data in System-Versioned Temporal Tables提出了一些建议,这些建议以Azure的销售推广为主导,但在此之后变得更有趣,并且Aaron Bertrand在这个MSSqlTips article中将粒度维护提升到了一个全新的水平。
没有停机时间的维护更难设置,但所有方法都可以自动化以“设置并忘记”简单。
以上是关于SQL Server保存表的当前状态以进行报告[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server:从链接到另一个表的 ID 列动态创建列
SQL Server查询到“ ftatten”数据以进行报告
SQL Server修改表结构时,不允许保存更改,阻止保存要求重新创建表的更改
SQL Server 不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的表进行了更改或启用了“阻止保存要求重新创建表的更改”选项