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
Sql server 如何创建在更新表的字段时自动更新datetime列的触发器_Sql Server_Ssms 2017 - Fatal编程技术网

Sql server 如何创建在更新表的字段时自动更新datetime列的触发器

Sql server 如何创建在更新表的字段时自动更新datetime列的触发器,sql-server,ssms-2017,Sql Server,Ssms 2017,我正在尝试创建一个列来度量行的更新日期。 我正在建立一个触发器,但我有一个关于钥匙的模糊问题 CREATE TRIGGER ModDate_location_update ON dim_Location AFTER UPDATE AS BEGIN UPDATE dbo.dim_Location SET UPDATE_DATE = GETDATE() --WHERE INSERT_DATE IN (SELECT INSERT_DATE FROM INSER

我正在尝试创建一个列来度量行的更新日期。 我正在建立一个触发器,但我有一个关于钥匙的模糊问题

CREATE TRIGGER ModDate_location_update
    ON dim_Location
    AFTER UPDATE
AS
BEGIN
    UPDATE dbo.dim_Location 
    SET UPDATE_DATE = GETDATE()
    --WHERE INSERT_DATE IN (SELECT INSERT_DATE FROM INSERTED)
    FROM dim_Location X
    JOIN dim_Location Y ON X.NEW_LOCATION_KEY = Y.NEW_LOCATION_KEY
end
Msg 8154,16级,状态1,程序修改日期位置更新,第6行[批次起始行119] 表“dbo.dim_Location”不明确


只需更新在插入的虚拟表中出现PK的所有行。例如:

CREATE TRIGGER ModDate_location_update
    ON dim_Location
    AFTER UPDATE
AS
BEGIN
    UPDATE dbo.dim_Location 
    SET UPDATE_DATE = GETDATE()
    WHERE LOCATION_ID IN (SELECT LOCATION_ID FROM INSERTED)
end

这里有一个潜在的更大的问题,那就是您的触发器似乎是递归的,因为
dim_Location
上的更新会触发一个触发器,该触发器会再次更新同一个表。这是预期的逻辑吗?在
UPDATE
子句中使用别名,但是,为什么不在此处引用
inserted
?这将在每次更新一行时更新整个表;这当然不是我们想要的。看起来你想要一个
而不是
触发器,真的。