0

在 SQL Server 中,如果您有一个临时表和一个历史表,如果您不知道第一次创建记录的日期/时间,如何找到记录的原始值?如果该记录从未被编辑过,那么它在历史表中将没有值,并且原始记录在时态表中。如果已编辑,原始记录在历史记录表中,但您不知道 valid_from 和 valid_to 日期。FOR SYSTEM_TIME 子句中是否有一个参数,它返回第一次添加到表时出现的记录,无论它是否已更改?

4

1 回答 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 回答