SQL Server 2008 中的递归触发器

Recursive Triggers in SQL Server 2008

我有两个 table table1table2table2 有如下层级数据

  geo_id     parent_id
        1       NULL      
        2        1        
        3        2        
        4        3        
        5        3        
        6        3   

和table1有如下数据

ID    geo_id
1       2      
2       3        
3       3        
4       3        
5       5       
6       5  

终于有了下面的更新触发器,

USE [MyDB]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[updateGeoHierarchyChilds] ON [dbo].[table2]
FOR UPDATE
AS
declare @ID int
BEGIN

 Declare VicIds CURSOR LOCAL FOR  SELECT geo_id from inserted
 OPEN VicIds
 FETCH NEXT  FROM VicIds into @ID
 WHILE @@FETCH_STATUS=0
 BEGIN
 update table1
set anyCol=AnyValue // suppose setting any column
where geo_id=@ID
update table2
set anyCol=AnyValue // suppose setting any column
where parent_id=@ID


FETCH NEXT FROM VicIds INTO @ID
    END
 CLOSE VicIds
 DEALLOCATE VicIds
END

例如,当我更新 table2 时,我 运行 下面的命令独立

update table2
set anyCol=anyValue //this line is supposition for sake of example
where geo_id=2

它为 geo_id=2 更新 table1 它还会更新所有 child where parent_id=2 in table2 但它没有根据 geo_id=2 的 child 更新 table1 简单地说, 当下面的触发器部分被调用时

update table2
set anyCol=AnyValue // suppose setting any column
where parent_id=@ID

它更新了同一个 table 中的一堆 child 记录,但是 child 记录没有更新它们在 table1

中的关系记录

在您设置选项之前,您的触发器不会递归

ALTER DATABASE [you db] SET RECURSIVE_TRIGGERS ON WITH NO_WAIT
GO