Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用当前日期替换空值的插入触发器后的SQL Server 2012_Sql_Sql Server_Triggers_Sql Insert - Fatal编程技术网

用当前日期替换空值的插入触发器后的SQL Server 2012

用当前日期替换空值的插入触发器后的SQL Server 2012,sql,sql-server,triggers,sql-insert,Sql,Sql Server,Triggers,Sql Insert,如果Products表的DateAdded列的值为null,我需要创建一个触发器,插入该列的当前日期 以下是我尝试过的: Use MyGuitarShop; IF OBJECT_ID ('Products_INSERT') IS NOT NULL DROP TRIGGER Products_INSERT; GO CREATE TRIGGER Products_INSERT ON Products AFTER INSERT AS UPDATE Products

如果
Products
表的
DateAdded
列的值为
null,我需要创建一个触发器,插入该列的当前日期

以下是我尝试过的:

Use MyGuitarShop;
IF OBJECT_ID ('Products_INSERT') IS NOT NULL
    DROP TRIGGER Products_INSERT;
GO

CREATE TRIGGER Products_INSERT
    ON Products
    AFTER INSERT
AS
    UPDATE Products
    SET DateAdded = GETDATE()
    WHERE DateAdded IS NULL
        AND DateAdded IN (SELECT DateAdded FROM inserted);
GO
为了测试这一点,我运行了以下
INSERT
语句:

INSERT INTO Products
VALUES (4, 'AK-5300', 'Awesome Keyboard 5300',
        'This keyboard is so awesome, you just might freak!',
        699.99, 30.00, NULL)
运行
INSERT
语句后,
DateAdded
列仍然显示
NULL

感谢您的帮助


非常感谢

你的方法不正确。您应该只使用
DateAdded
的默认值。但是,此查询的问题是:

UPDATE Products
SET DateAdded = GETDATE()
WHERE DateAdded IS NULL
    AND DateAdded IN (SELECT DateAdded FROM inserted);
这两个条件是不相容的。您的
DataAdded为空
fine。这是真的。但是几乎所有与
NULL
的比较都是错误的,包括
比较中的
。因此,对于您想要做的事情,这应该足够了:

UPDATE Products
SET DateAdded = GETDATE()
WHERE DateAdded IS NULL;
你可以写:

UPDATE Products
SET DateAdded = GETDATE()
WHERE DateAdded IS NULL OR
      DateAdded IN (SELECT DateAdded FROM inserted);

我注意到触发器正在更新被修改的同一个表,这通常会导致代码混乱。

为什么要使用触发器?只需给列一个默认值
getdate()
@GordonLinoff它是我分配的一部分,触发器用于更新将来可能插入的任何记录,而不指定日期,这样它将包括当前日期。谢谢@Gordon!我想我把问题复杂化了。谢谢!