我写的以下触发器是,在记录中插入操作员名称后,使用包含该操作员小时数的另一个表中的数据更新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?
答案 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;
在. . .
中包括所有其他列。