【问题标题】:Find original value for record using temporal and history table使用时间和历史表查找记录的原始值
【发布时间】:2022-01-18 15:52:55
【问题描述】:
在 SQL Server 中,如果您有一个临时表和一个历史表,如果您不知道第一次创建记录的日期/时间,如何找到记录的原始值?
如果该记录从未被编辑过,那么它在历史表中将没有值,并且原始记录在时态表中。
如果已编辑,原始记录在历史记录表中,但您不知道 valid_from 和 valid_to 日期。
FOR SYSTEM_TIME 子句中是否有一个参数,它返回第一次添加到表中时出现的记录,而不管它此后是否发生了变化?
【问题讨论】:
标签:
sql
temporal-tables
history-tables
【解决方案1】:
答案只有一个注释。你提到这个:
如果该记录从未被编辑过,那么它在历史表中将没有值,而原始记录在时态表中。如果被编辑,则原始记录在历史表中
使用 Temporal Tables 的一个巨大好处是它可以充当单个表。这不是您必须通过联合来确定您应该查看哪个表的两张表。如果您手动创建历史记录表(例如滚动您自己的审计解决方案),那么您将不得不跨两个不同的表进行查询。
现在进入您的解决方案。最简单的方法是使用 SYSTEM_TIME ALL 标志。它是这样工作的:
SELECT TOP 1 *
FROM Person
FOR SYSTEM_TIME ALL
WHERE Id = 1
ORDER BY ValidFrom ASC
这将返回特定 ID 的 ALL 历史记录。但是因为我们按 ValidFrom 排序,然后选择 TOP 1,所以我们实际上返回了第一个条目。
同样,无论第一条记录是在“当前”表还是历史表中,这都有效。
更多信息在这里:https://dotnetcoretutorials.com/2021/12/11/temporal-tables-in-sql-server/