触发添加修改日期的插入和更新
Trigger on insert and update that adds modification date
我正在制作一个包含姓名、电子邮件等的简单 table,但我还有一个 ModifiedDate
。我的想法是在插入和更新之后使用触发器,并插入当前日期。因此,如果有人对该列进行了任何操作(删除除外),日期应反映出来。
但是这不起作用。
CREATE TRIGGER ModDate
ON X
AFTER INSERT, UPDATE
AS
BEGIN
INSERT INTO X (ModifiedDate)
VALUES (GETDATE())
END
现在我有几个不能为空的值,这似乎是尝试创建一个新行。我希望它将日期插入到当前正在执行的行中,但我不知道如何操作。另外,如果我一次添加 5 行怎么办?
您需要在触发器中加入inserted
虚拟table 以将更新的行限制为实际更改的行。试试这个:
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
列。
有关 已插入 和 已删除 table 的详细信息,请参阅 documentation。
如果您没有插入数据的键,并且您没有命令 sql 在 modifieddate 列上添加默认值,则可以在 modifieddate 列为空的情况下获取插入触发器:
CREATE TRIGGER ModDate
ON TableX
AFTER INSERT
AS
BEGIN
UPDATE tableX SET ModifiedDate = GETDATE() where modifieddate is null
END
CREATE TRIGGER ModDate
ON TableX
FOR INSERT, UPDATE
AS
BEGIN
UPDATE TableX
SET ModifiedDate = GETDATE()
WHERE Id = (Select Id from Inserted)
END
我正在制作一个包含姓名、电子邮件等的简单 table,但我还有一个 ModifiedDate
。我的想法是在插入和更新之后使用触发器,并插入当前日期。因此,如果有人对该列进行了任何操作(删除除外),日期应反映出来。
但是这不起作用。
CREATE TRIGGER ModDate
ON X
AFTER INSERT, UPDATE
AS
BEGIN
INSERT INTO X (ModifiedDate)
VALUES (GETDATE())
END
现在我有几个不能为空的值,这似乎是尝试创建一个新行。我希望它将日期插入到当前正在执行的行中,但我不知道如何操作。另外,如果我一次添加 5 行怎么办?
您需要在触发器中加入inserted
虚拟table 以将更新的行限制为实际更改的行。试试这个:
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
列。
有关 已插入 和 已删除 table 的详细信息,请参阅 documentation。
如果您没有插入数据的键,并且您没有命令 sql 在 modifieddate 列上添加默认值,则可以在 modifieddate 列为空的情况下获取插入触发器:
CREATE TRIGGER ModDate
ON TableX
AFTER INSERT
AS
BEGIN
UPDATE tableX SET ModifiedDate = GETDATE() where modifieddate is null
END
CREATE TRIGGER ModDate
ON TableX
FOR INSERT, UPDATE
AS
BEGIN
UPDATE TableX
SET ModifiedDate = GETDATE()
WHERE Id = (Select Id from Inserted)
END