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
相关产品推荐
相关产品推荐

