首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新触发器后,不更新SQL表中的特定行数据

更新触发器后,不更新SQL表中的特定行数据
EN

Stack Overflow用户
提问于 2020-11-10 10:10:09
回答 1查看 534关注 0票数 0

在这里SQL很新..。我正在尝试在Server中获得一个'after‘触发器,以便在更新另一个列(rig_ident)时更新一个列(rig_id)。rig_ident是通过搜索rig_log表找到的。

使用下面的代码,它可以工作,但我担心它可能会在表中的每一行中运行,并相应地进行检查,这将浪费处理和时间!有人能就如何正确地做到这一点提出建议吗?

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-10 12:26:06

您的触发器已中断(如注释所示),因为您假设只更新/插入一行。但是Server触发器在一组行上工作,而不是在单个行上工作。

我认为你可以将逻辑替换为:

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64766844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档