You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求创建SQL After Update触发器:同步Engineering与Electrical表指定列

问题分析与解决方案

你的原触发器存在几个核心问题:

  • 触发器绑定表错误:需求是当Electrical表的Tag被填充时触发同步,触发器应建在Electrical表上,而非Engineering表。
  • 操作逻辑错误:需要更新Electrical中已存在的匹配行,而非插入新行,原代码的INSERT不符合需求。
  • 关联逻辑偏差:原代码的表关联未正确对应Electrical的新数据与Engineering的源数据。

正确的触发器代码

CREATE TRIGGER [dbo].[tr_Electrical_SyncFromEngineering]
ON [dbo].[Electrical]
AFTER INSERT, UPDATE
AS
BEGIN
    SET NOCOUNT ON; -- 避免返回额外的影响行数消息

    -- 更新Electrical中Tag已填充且在Engineering中有匹配的行
    UPDATE e
    SET 
        e.[Service Description] = eng.[Service Description],
        e.[Horsepower] = eng.[Horsepower],
        e.[RPM] = eng.[RPM],
        e.[Project Number] = eng.[Project Number]
    FROM 
        Electrical e
    INNER JOIN 
        inserted i ON e.Tag = i.Tag -- 关联Electrical中刚插入/更新的行
    INNER JOIN 
        Engineering eng ON i.Tag = eng.Tag -- 匹配Engineering中的对应数据
    WHERE 
        i.Tag IS NOT NULL; -- 确保Tag已被填充
END

关键说明

  1. 触发时机:选择AFTER INSERT, UPDATE,覆盖两种场景——向Electrical插入新行并填充Tag,或是更新已有行的Tag值。
  2. 关联逻辑:通过inserted系统表获取Electrical中刚变更的行,再关联Engineering表拿到对应源数据,最后更新Electrical的目标列。
  3. 过滤条件:WHERE i.Tag IS NOT NULL确保只处理Tag已被填充的行,避免无意义的空值匹配。
  4. 列名适配:请根据你的实际列名调整代码中的标识(比如原代码里的ICM_SERVICE_DESCRIPTION_等,需替换为表中实际列名)。

测试建议

  • 插入测试:向Electrical表插入一行包含有效Tag的数据,检查对应列是否自动同步自Engineering。
  • 更新测试:修改Electrical表中某行的Tag为Engineering中存在的值,验证列数据是否更新为对应源数据。

内容的提问来源于stack exchange,提问作者Drafter-SQL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 13:25:30