触发器在运行时将所有其他插入的值转换为null

时间:2019-02-18 23:54:13

标签: sql sql-server ssms

我写的以下触发器是,在记录中插入操作员名称后,使用包含该操作员小时数的另一个表中的数据更新SetHours字段。这不是实时更新,我想要。下次查看该表时会更新。

ALTER TRIGGER [dbo].[FindOperatorHours]
ON [dbo].[tblTime]
INSTEAD OF INSERT
AS 
BEGIN  
  INSERT tblTime (SetHours)
    SELECT ISNULL(INSERTED.SetHours, tblUser.OperatorHours) AS SetHours
    FROM INSERTED
    JOIN tblUser ON INSERTED.Operator = tblUser.UserID
END

这会在重新打开表时将SetHours以外的所有数据覆盖为NULL,但是该值是否已正确获取? 是否可以进行实时更新,而不将我的数据转换为null?

1 个答案:

答案 0 :(得分:1)

这是插入新行,因此您需要在列中包含 all

ALTER TRIGGER [dbo].[FindOperatorHours]
ON [dbo].[tblTime]
INSTEAD OF INSERT
AS 
BEGIN  
  INSERT tblTime ( . . . , SetHours)
    SELECT . . ., COALESCE(i.SetHours, tblUser.OperatorHours) AS u
    FROM INSERTED i JOIN
         tblUser u
         ON i.Operator = u.UserID;
END;

. . .中包括所有其他列。