当前位置:  开发笔记 > 编程语言 > 正文

SQL Server 2005自动更新的DateTime列 - LastUpdated

如何解决《SQLServer2005自动更新的DateTime列-LastUpdated》经验,为你挑选了1个好方法。

我定义了一个表(参见下面的代码片段).如何添加约束或其他任何内容,以便在更改行时随时更新LastUpdate列?

CREATE TABLE dbo.Profiles
(
        UserName                                varchar(100)            NOT NULL,
        LastUpdate                              datetime                NOT NULL  CONSTRAINT DF_Profiles_LastUpdate DEFAULT (getdate()),
        FullName                                varchar(50)             NOT NULL,
        Birthdate                               smalldatetime           NULL,
        PageSize                                int                     NOT NULL CONSTRAINT DF_Profiles_PageSize DEFAULT ((10)),
        CONSTRAINT PK_Profiles PRIMARY KEY CLUSTERED (UserName ASC),
        CONSTRAINT FK_Profils_Users FOREIGN KEY (UserName) REFERENCES dbo.Users (UserName) ON UPDATE CASCADE ON DELETE CASCADE  
)

Kevin Fairch.. 24

我同意其他人 - 在LastUpdate列上设置GetDate()的默认值,然后使用触发器来处理任何更新.

就像这样简单:

CREATE TRIGGER KeepUpdated on Profiles
FOR UPDATE, INSERT AS 
UPDATE dbo.Profiles 
SET LastUpdate = GetDate()
WHERE Username IN (SELECT Username FROM inserted)

如果你想变得非常花哨,那么让它评估一下被改变的内容与数据库中的内容有什么关系,只有在存在差异时才修改LastUpdate.

考虑一下......

早上7点 - 创建用户'jsmith',姓氏为'Smithe'(oops),LastUpdate默认为上午7点

早上8点 - 'jsmith'给IT发电子邮件说他的名字不正确.您立即执行更新,因此姓氏现在是'Smith'并且(由于触发器)LastUpdate显示为8am

下午2点 - 你的懒人同事终于厌倦了StumbleUpon并检查他的电子邮件.他看到了"jsmith"关于名称更改的早期消息.他运行:UPDATE配置文件SET LastName ='Smith'WHER用户名='jsmith',然后返回冲浪MySpace.触发器并不关心姓氏是否已经是"史密斯",所以LastUpdate现在显示下午2点.

如果只是在更新语句运行时盲目地更改LastUpdate,那么它在技术上是正确的,因为更新确实发生了,但实际比较更改并相应地采取行动可能更有意义.这样,同事的下午2点更新声明仍然会运行,但LastUpdate仍会显示早上8点.

--Kevin



1> Kevin Fairch..:

我同意其他人 - 在LastUpdate列上设置GetDate()的默认值,然后使用触发器来处理任何更新.

就像这样简单:

CREATE TRIGGER KeepUpdated on Profiles
FOR UPDATE, INSERT AS 
UPDATE dbo.Profiles 
SET LastUpdate = GetDate()
WHERE Username IN (SELECT Username FROM inserted)

如果你想变得非常花哨,那么让它评估一下被改变的内容与数据库中的内容有什么关系,只有在存在差异时才修改LastUpdate.

考虑一下......

早上7点 - 创建用户'jsmith',姓氏为'Smithe'(oops),LastUpdate默认为上午7点

早上8点 - 'jsmith'给IT发电子邮件说他的名字不正确.您立即执行更新,因此姓氏现在是'Smith'并且(由于触发器)LastUpdate显示为8am

下午2点 - 你的懒人同事终于厌倦了StumbleUpon并检查他的电子邮件.他看到了"jsmith"关于名称更改的早期消息.他运行:UPDATE配置文件SET LastName ='Smith'WHER用户名='jsmith',然后返回冲浪MySpace.触发器并不关心姓氏是否已经是"史密斯",所以LastUpdate现在显示下午2点.

如果只是在更新语句运行时盲目地更改LastUpdate,那么它在技术上是正确的,因为更新确实发生了,但实际比较更改并相应地采取行动可能更有意义.这样,同事的下午2点更新声明仍然会运行,但LastUpdate仍会显示早上8点.

--Kevin

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有