У меня есть две таблицы 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
TRIGGER [DBO]. [updateGeoHierarchyChilds] ON [DBO]. [table2] я полагаю? – Serg
Вам здесь не нужен курсор. Это можно было бы превратить в 2 простых оператора обновления и полностью забыть курсор. Триггеры не будут работать рекурсивно. Вам нужно сделать эти обновления в своем коде. –
https://technet.microsoft.com/en-us/library/ms191520(v=sql.105).aspx –