gpt4 book ai didi

sql-server - SQL Server 2005 自动更新日期时间列 - LastUpdated

转载 作者:太空狗 更新时间:2023-10-30 01:42:08 24 4
gpt4 key购买 nike

我定义了一个表(见下面的代码片段)。如何添加约束或其他任何内容,以便在行发生更改时自动更新 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
)

最佳答案

我同意其他人的意见——在 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。

考虑这个...

  • 7am - 用户“jsmith”的姓氏为“Smithe”(糟糕),LastUpdate 默认为 7am

  • 8am - 'jsmith' 给 IT 发邮件说他的名字不正确。您立即执行更新,所以姓氏现在是“Smith”并且(感谢触发器)LastUpdate 显示上午 8 点

  • 2pm - 您懒惰的同事终于对 StumbleUpon 感到厌烦并查看他的电子邮件。他看到了来自“jsmith”的关于名称更改的早期消息。他运行:UPDATE Profiles SET LastName='Smith' WHERE Username='jsmith' 然后去回到网上冲浪 MySpace。然而,触发器并不关心姓氏已经是“Smith”,因此 LastUpdate 现在显示下午 2 点。

如果您只是在更新语句运行时盲目更改 LastUpdate,这在技术上是正确的,因为更新确实发生了,但实际比较更改并采取相应行动可能更有意义。这样,同事的 2pm Update 语句仍会运行,但 LastUpdate 仍会显示 8am。

--凯文

关于sql-server - SQL Server 2005 自动更新日期时间列 - LastUpdated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com