2016-08-30 8 views
1

У меня есть две таблицы table1 и table2, table2 имеют иерархические данные, такие как нижеРекурсивные триггеры в SQL Server 2008

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 

наконец у меня есть ниже триггер Update,

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 [email protected] 
update table2 
set anyCol=AnyValue // suppose setting any column 
where [email protected] 


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

, когда я обновляю tabl e2, например, бегаю ниже только команды стендом

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

обновляет table1 для geo_id=2 также обновляет все дочерние где parent_id=2 в table2 но это не обновление table1 против Чайлдс из geo_id=2 просто говоря, Когда ниже части триггера под названием

update table2 
set anyCol=AnyValue // suppose setting any column 
where [email protected] 

он обновляет кучу дочерних записей в одной таблице, но дочерние записи не updatin г Тир соотношение запись в table1

+0

TRIGGER [DBO]. [updateGeoHierarchyChilds] ON [DBO]. [table2] я полагаю? – Serg

+0

Вам здесь не нужен курсор. Это можно было бы превратить в 2 простых оператора обновления и полностью забыть курсор. Триггеры не будут работать рекурсивно. Вам нужно сделать эти обновления в своем коде. –

+0

https://technet.microsoft.com/en-us/library/ms191520(v=sql.105).aspx –

ответ

0

Вы инициируете не рекурсию, пока вы установите опцию

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

он сделал что-то новое, lemme проверить, что он делает правильную вещь –

+0

Спасибо, что работает, –

Смежные вопросы