使用时间和历史查找记录的原始值 table
Find original value for record using temporal and history table
在 SQL 服务器中,如果您有时间 table 和历史记录 table,如果您不知道 date/time 那个记录是第一个创建的?
如果记录从未被编辑过,那么它在历史 table 中就没有价值,原始记录在时间 table 中。
如果它被编辑,原始记录在历史记录 table 中,但具有您不知道的 valid_from 和 valid_to 日期。
FOR SYSTEM_TIME 子句中是否有一个参数 returns 记录首次添加到 table 时的样子,而不管此后是否发生过更改?
答案只有一个注释。你提到这个:
If the record was never edited, then it won't have a value in the history table and the original record is in the temporal table. If it was edited, the original record is in the history table
使用时态表的一个巨大好处是它可以作为一个 table。这不是两个 table,您必须在其中进行联合才能确定您应该查看哪个 table。如果您手动创建历史 table(例如,滚动您自己的审计解决方案),那么您将不得不查询两个不同的 table。
现在开始您的解决方案。最简单的方法是使用 SYSTEM_TIME ALL 标志。它是这样工作的:
SELECT TOP 1 *
FROM Person
FOR SYSTEM_TIME ALL
WHERE Id = 1
ORDER BY ValidFrom ASC
此 returns ALL 个特定 ID 的历史记录。但是因为我们按 ValidFrom 排序,然后 select TOP 1,我们实际上 return 第一个条目。
同样,无论第一条记录是在“当前”table 还是历史记录 table。
更多信息在这里:https://dotnetcoretutorials.com/2021/12/11/temporal-tables-in-sql-server/
在 SQL 服务器中,如果您有时间 table 和历史记录 table,如果您不知道 date/time 那个记录是第一个创建的? 如果记录从未被编辑过,那么它在历史 table 中就没有价值,原始记录在时间 table 中。 如果它被编辑,原始记录在历史记录 table 中,但具有您不知道的 valid_from 和 valid_to 日期。 FOR SYSTEM_TIME 子句中是否有一个参数 returns 记录首次添加到 table 时的样子,而不管此后是否发生过更改?
答案只有一个注释。你提到这个:
If the record was never edited, then it won't have a value in the history table and the original record is in the temporal table. If it was edited, the original record is in the history table
使用时态表的一个巨大好处是它可以作为一个 table。这不是两个 table,您必须在其中进行联合才能确定您应该查看哪个 table。如果您手动创建历史 table(例如,滚动您自己的审计解决方案),那么您将不得不查询两个不同的 table。
现在开始您的解决方案。最简单的方法是使用 SYSTEM_TIME ALL 标志。它是这样工作的:
SELECT TOP 1 *
FROM Person
FOR SYSTEM_TIME ALL
WHERE Id = 1
ORDER BY ValidFrom ASC
此 returns ALL 个特定 ID 的历史记录。但是因为我们按 ValidFrom 排序,然后 select TOP 1,我们实际上 return 第一个条目。
同样,无论第一条记录是在“当前”table 还是历史记录 table。
更多信息在这里:https://dotnetcoretutorials.com/2021/12/11/temporal-tables-in-sql-server/