【问题标题】:How to retrieve the datetime when one row was inserted/updated in Sql Server 2005?在 Sql Server 2005 中插入/更新一行时如何检索日期时间?
【发布时间】:2009-06-02 13:51:06
【问题描述】:

有没有办法找到这些信息?也许在 Sql Server 的某种内部日志中? 我需要根据历史数据生成报告,但我没有在我的应用程序中实现该功能,因为过去不是必需的。现在我被困住了。

谢谢

【问题讨论】:

    标签: sql-server sql-server-2005 logging


    【解决方案1】:

    您必须向表中添加一列(使其可为空),然后使用 getdate() 为所有行播种。这当然不准确,但这是您唯一的选择。所有行都有数据后,将 NOT NULL 约束添加到列。

    【讨论】:

    • 并将该列的默认值设置为GETDATE()
    • 我不知道这是否是唯一的解决方案,但它是一个很好的解决方案。
    • 但在他的情况下,它不起作用,因为他想在添加此列之前检索有关他已经插入的行的信息。
    【解决方案2】:

    你可能很幸运能够从一些日志中获取数据,但你需要为未来做好准备。不管规范怎么说,添加一些额外的信息和日志记录是个好主意。

    在非常重要的表中,我有一个包含行的每个版本的历史表,包括 LastChgID 和 LastChgDate。

    在重要的表中我有 CreateID、CreateDate、LastChgID、LastChgDate

    在所有其他表(代码表除外)中,我有 LastChgID、LastChgDate

    当您设计系统时,您会知道什么是重要的。

    其中很多都显示在屏幕上,但即使不是,有些心烦意乱的人会打电话/发邮件给谁这样做?你可以说“你做了一个 2009-06-02 10:06:22.213!”

    【讨论】:

      【解决方案3】:

      对不起,查理。如果它是一个网络应用程序,您可能能够根据该日志生成报告。

      【讨论】:

        【解决方案4】:

        保留事务日志并且您正在发送日志的可能性很小。请咨询您的 DBA。

        这些日志可以为您提供您正在寻找的日期/时间戳。

        【讨论】:

          【解决方案5】:

          SQL Server 没有对所有数据更改进行自动和完整的审核。

          您必须构建它。无论它是否在最初的需求中,跟踪事情发生的时间是常识。

          最好的办法是添加这个,并接受新功能之前的数据没有跟踪。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-16
            • 1970-01-01
            • 2010-12-19
            • 1970-01-01
            • 2010-09-07
            • 2013-04-10
            相关资源
            最近更新 更多