您的位置:首页 > 其它

实现删除指定节点及所有子结点的处理触发器

2010-03-09 09:45 274 查看
CREATE TABLE tb(ID int,PID int,Name nvarchar(10))

INSERT tb SELECT 1,NULL,'山东省'

UNION ALL SELECT 2,1   ,'烟台市'

UNION ALL SELECT 4,2   ,'招远市'

UNION ALL SELECT 3,1   ,'青岛市'

UNION ALL SELECT 5,NULL,'四会市'

UNION ALL SELECT 6,5   ,'清远市'

UNION ALL SELECT 7,6   ,'小分市'

GO

--删除处理触发器(同步删除被删除节点的所有子节点)

CREATE TRIGGER tr_DeleteNode ON tb

FOR DELETE

AS

IF @@ROWCOUNT=0 RETURN --如果没有满足删除条件的记录,直接退出

--查找所有被删除节点的子节点

DECLARE @t TABLE(ID int,Level int)

DECLARE @Level int

SET @Level=1

INSERT @t SELECT a.ID,@Level

FROM tb a,deleted d

WHERE a.PID=d.ID

WHILE @@ROWCOUNT>0

BEGIN

SET @Level=@Level+1

INSERT @t SELECT a.ID,@Level

FROM tb a,@t b

WHERE a.PID=b.ID

AND b.Level=@Level-1

END

DELETE a

FROM tb a,@t b

WHERE a.ID=b.ID

GO

--删除

DELETE FROM tb WHERE ID in(2,3,5)

SELECT * FROM tb

/*--结果

ID          PID        Name

---------------- ----------------- ----------

1           NULL      山东省

--*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐