代码之家  ›  专栏  ›  技术社区  ›  Zachary Scott

Microsoft SQL Server:有什么方法可以告诉您何时创建了记录?

  •  11
  • Zachary Scott  · 技术社区  · 14 年前

    我们的客户希望在记录创建日期之前订购。对我来说,这似乎是一个系统变量,某种记录本身的元数据。

    有没有办法在创建记录时不实际创建默认值为GetDate()的datetime字段,并希望没有人修改它?

    5 回复  |  直到 14 年前
        1
  •  16
  •   JNK    14 年前

    不。

    你需要有一个专栏。

    想象一下,如果您需要为创建的每个记录保留一个记录,那么元数据会有多大!您是否还想将元数据保存在元数据上,以便知道元数据何时更新?空间使用会迅速升级。

    SQL Server保留了一些统计信息,但是这个特定的信息需要来自用户定义的字段。

    另外,如果使用查找表,则可能会使修改已创建字段上的日期更加困难。创建一个表“TableName_Create date”,并使用实际表中的主键和日期值。你的约会在一个单独的地点,不太可能被修改,但是你仍然可以 JOIN 为了得到你的订单。您需要创建一个触发器来用新值更新它。

    如果你只想要 日期 而且不需要datetime值,您可以更进一步,只需要一个日期表和一个连接到该表的查找表。即。:

    Table->Table.PK + Date.Pk -> DateTable

    如果有很多行(我认为每行4字节),这将节省大量的驱动器空间。

        2
  •  4
  •   HLGEM    14 年前

    应添加creationdate字段。通过在更新时添加一个不允许更新该字段的触发器来修复“希望没有人修改它”部分。

        3
  •  1
  •   Ta01    14 年前

    不,据我所知连系统表都没有。我敢肯定,你可以翻阅旧的事务日志,但从本质上说,不行。

        4
  •  0
  •   FShieldheart    9 年前

    我曾经遇到过这样一种情况:表的行顺序是必需的,但是没有时间戳(CreateDateTime、UpdateDateTime等等)列可用。所以,我只有事务日志。直接读取事务日志没有帮助,因为它不容易解析。因此,我发现了一个名为“ApexSQL Log”的程序,它非常有用。它有所有的过滤选项,您可以读取所有的日志数据,而无需核心操作。虽然这个解决方案让我很满意,但它有一个缺点:只能根据事务操作筛选日期(开始时间和结束时间)。如果您正在搜索一个查询操作,例如一个封装在事务中的insert,那么您无法检索确切的insert时间(至少我找不到方法),只能检索事务时间。如果您的操作都是原子的,那么您可以直接拥有所有的行创建日期信息。

        5
  •  -4
  •   littlegreen    14 年前

    如果他只想按它点菜,你可以考虑用 timestamp 列。

    它不能与现实世界中的日期相关,但您可以对其进行排序。