使用触发器来获取GETDATE()

问题描述 投票:-1回答:2

我正在使用Trigger将Products表更新为当前日期,如果该列的值为null。我还有一切,当我将新值插入表中时,DateAdded列为NULL而不是今天的当前日期。我不确定什么是错的,为什么它不起作用。任何帮助将不胜感激,谢谢!

IF OBJECT_ID('Products_INSERT') IS NOT NULL
DROP TRIGGER Products_INSERT

CREATE TRIGGER Products_INSERT
ON Products 
AFTER INSERT
AS
UPDATE Products
SET DateAdded = GETDATE()
WHERE DateAdded = NULL;
sql sql-server triggers getdate
2个回答
5
投票

我希望触发器看起来像这样:

CREATE TRIGGER INSERT_Products ON Products 
AFTER INSERT
AS BEGIN
    UPDATE Products
        SET DateAdded = GETDATE()
        FROM Products p JOIN
             Inserted i
             ON p.productid = i.productid;
END;

如果要测试未在insert中设置的值:

CREATE TRIGGER INSERT_Products ON Products 
AFTER INSERT
AS BEGIN
    UPDATE Products
        SET DateAdded = GETDATE()
        FROM Products p JOIN
             Inserted i
             ON p.productid = i.productid
        WHERE DateAdded IS NOT NULL;
END;

也就是说,我只会使用默认值 -

create table Products (
    ProductId int identity primary key,
    . . . 
    DateAdded datetime not null default getdate()
);

比触发器简单得多,这仍然允许您使用自己的值覆盖默认值。


3
投票

null不是一个价值,它缺乏价值。为了检查它,您需要使用is运算符,而不是=运算符:

UPDATE Products
SET    DateAdded = GETDATE()
WHERE  DateAdded IS NULL;
-- Here ---------^
© www.soinside.com 2019 - 2024. All rights reserved.