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