我正在制作一个包含姓名、电子邮件等的简单表格,但我还有一个 ModifiedDate
.我的想法是在插入和更新后使用触发器,并插入当前日期。因此,如果有人对该列执行任何操作(删除除外),则日期应反射(reflect)这一点。
然而,这是行不通的。
CREATE TRIGGER ModDate
ON X
AFTER INSERT, UPDATE
AS
BEGIN
INSERT INTO X (ModifiedDate)
VALUES (GETDATE())
END
现在我有几个不能为空的值,这似乎是尝试创建一个新行。我希望它将日期插入当前正在执行的行中,但我不知道如何。如果我一次添加 5 行怎么办?
最佳答案
您需要加入inserted
触发器中的虚拟表以将更新的行限制为实际更改的行。尝试这个:
CREATE TRIGGER ModDate
ON TableX
AFTER INSERT, UPDATE
AS
BEGIN
UPDATE X
SET ModifiedDate = GETDATE()
FROM TableX X
JOIN inserted i ON X.key = i.key -- change to whatever key identifies
-- the tuples
END
就像@ZoharPeled 在下面的评论中正确指出的那样,让触发器更新插入日期确实没有多大意义 - 最好使用
getdate()
作为列上的默认值(或者甚至作为另一列 InsertedDate
,如果您想跟踪最初创建记录的时间)并且让触发器只修改 ModifiedDate
更新后的列。见 documentation有关插入和删除表的更多信息。
关于sql-server - 触发添加修改日期的插入和更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28988885/