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

SQL Server实现parents与kids表双向同步的触发器开发咨询

你现有的TR_Update_Kids触发器逻辑符合需求,可正常处理parent表新增、更新时的kids表同步。以下是kids表反向同步到parent表的触发器实现:

CREATE OR ALTER TRIGGER TR_Sync_Kids_To_Parent ON [dbo].[kids] AFTER UPDATE AS
BEGIN
   SET NOCOUNT ON;
   -- 避免循环触发:若本次更新是parent侧触发器触发的,则直接终止
   IF TRIGGER_NESTLEVEL(OBJECT_ID('TR_Sync_Kids_To_Parent','TR')) > 1 RETURN
   -- 仅当更新了需要同步的字段时才执行逻辑,减少性能损耗
   IF NOT (UPDATE(address) OR UPDATE(sports) OR UPDATE(team)) RETURN

   -- 按parentID聚合更新,避免同一parent对应多条kids记录时重复更新parent
   UPDATE p
   SET 
       p.address = i.address,
       p.sports = i.sports,
       p.team = i.team
   FROM [dbo].[parents] p
   INNER JOIN (
       -- 取每个parentID的最新更新值,可根据实际业务调整聚合逻辑
       SELECT DISTINCT parentID, address, sports, team 
       FROM INSERTED
   ) i ON p.id = i.parentID

   PRINT ('Synced kids field changes to parent table')
END

逻辑说明

  • 你之前约定了孩子姓名不可修改,因此触发器没有处理name字段变更的同步逻辑,若后续开放姓名修改权限,需要额外补充parent表kids逗号分隔字段的更新逻辑。
  • 如果你不需要将kids的空值同步到parent,可以把赋值逻辑改为p.address = COALESCE(i.address, p.address),避免空值覆盖parent的已有值。
  • 两个触发器都加了嵌套层级判断,不会出现parent更新kids、kids反过来又更新parent的死循环问题。

内容的提问来源于stack exchange,提问作者Cogicero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:30:04