【问题标题】: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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-12
      • 1970-01-01
      • 2011-06-21
      • 2018-09-07
      • 2018-01-10
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      相关资源
      最近更新 更多