如何解决SQL Server行日期最后修改的时间
| 我的一位同事说,SQL Server将最后修改的日期和时间保存在每个记录的“隐藏列”中。我很确定他说错了。你能跟我确认一下吗?解决方法
正如其他人所暗示的那样,您的同事一定在胡说八道,或指其他。为此,记录或页面的磁盘结构不包含对上次更新时间的任何引用。虽然可以在对象级别找到有关上一次更新的信息,但在记录/行级别上找不到此类信息。
, 没有按行维护的隐藏列,其中包含上次修改的日期/时间。也没有包含执行此更改的用户的身份的列,也没有标识上一次执行更改(插入或更新)的列。
如果需要这些功能中的任何一个,则必须实现它们。对于某些用户而言,开销的最后一点对他们而言都很重要,因此拥有隐藏功能(具有隐藏成本)将是不可接受的。
, 在Pinal Dave中,有一个DMV可用于获取此信息。您的同事可能会在修改后的行中引用“ 0”,但据我所知,只有在您明确要求添加该类型的列的情况下,它才会保持该状态。
SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName,last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( \'AdventureWorks\')
AND OBJECT_ID=OBJECT_ID(\'test\');
, 如果您想知道特定行的最后更新时间,则应在表中维护一个\“ LastUpdated \”时间戳列,并在每次UPDATE时对其进行更新(例如,通过触发器自动更新)
, 记录的上次更新时间和更新时间可以通过添加具有默认值GetDate()的last_updated列来维护。由于您的应用程序最有可能使用公共数据库连接,因此最后一个更新用户名非常棘手。可以通过以下方式填充用户名:将其作为自定义项添加到所有插入和更新过程中,并传递AD,SSO或登录凭据,这对您的身份验证方法而言是有意义的。
最后更新列非常有用且必要,因此应将其作为数据库或至少表的设置选项包括在内。为什么?输入事实后,尝试获取不带此信息的信息(提示,如果您有一个标识字段,“可能”会有所帮助,但可能不可靠)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。