在这里SQL很新..。我正在尝试在Server中获得一个'after‘触发器,以便在更新另一个列(rig_ident)时更新一个列(rig_id)。rig_ident是通过搜索rig_log表找到的。
使用下面的代码,它可以工作,但我担心它可能会在表中的每一行中运行,并相应地进行检查,这将浪费处理和时间!有人能就如何正确地做到这一点提出建议吗?
ALTER TRIGGER engineer_log_onUpdate_trig
ON engineer_log
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF (UPDATE(rig_id))
BEGIN
DECLARE @rigNum AS int
DECLARE @rigId AS int
SELECT @rigNum = i.rig_id
FROM inserted i --get the updated rig id value
--get the required rig ident value from rig_log table...
SELECT @rigId = ident
FROM rig_log
WHERE rig_id = @rigNum
--try to update the rig_ident column of the row the user is updating...
UPDATE engineer_log
SET rig_ident = @rigId
WHERE rig_id = @rigNum
END
END发布于 2020-11-10 12:26:06
您的触发器已中断(如注释所示),因为您假设只更新/插入一行。但是Server触发器在一组行上工作,而不是在单个行上工作。
我认为你可以将逻辑替换为:
UPDATE el
SET rig_ident = rl.ident
FROM engineer_log el JOIN
rig_log rl
ON rl.rig_id = el.rig_id JOIN
inserted i
ON i.rig_id = rl.rig_id
WHERE rig_id = @rigNum;https://stackoverflow.com/questions/64766844
复制相似问题