当前位置: 代码迷 >> ASP.NET >> 大家帮忙解决下~删除一个菜单时自动删除其子菜单及子菜单下的子菜单。该怎么处理
  详细解决方案

大家帮忙解决下~删除一个菜单时自动删除其子菜单及子菜单下的子菜单。该怎么处理

热度:10049   发布时间:2013-02-25 00:00:00.0
大家帮忙解决下~~~删除一个菜单时自动删除其子菜单及子菜单下的子菜单。。。
数据库表字段位,ID,NAME,ParentID(父ID)

求删除一个菜单时自动删除其子菜单及子菜单下的子菜单。。。       的SQL语句...

------解决方案--------------------------------------------------------
触发器
------解决方案--------------------------------------------------------
用触发器是个很好的方法
代码写的话只好循环删
------解决方案--------------------------------------------------------
你用下面这个SQL函数将子节点的数据都找出来,再将这些数据删掉即可
--测试数据
CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10))
INSERT tb SELECT '001 ',NULL , '山东省 '
UNION ALL SELECT '002 ', '001 ', '烟台市 '
UNION ALL SELECT '004 ', '002 ', '招远市 '
UNION ALL SELECT '003 ', '001 ', '青岛市 '
UNION ALL SELECT '005 ',NULL , '四会市 '
UNION ALL SELECT '006 ', '005 ', '清远市 '
UNION ALL SELECT '007 ', '006 ', '小分市 '
GO

--查询指定节点及其所有子节点的函数
CREATE FUNCTION f_Cid(@ID char(3))
RETURNS @t_Level TABLE(ID char(3),Level int)
AS
BEGIN
DECLARE @Level int
SET @Level=1
INSERT @t_Level SELECT @ID,@Level
WHILE @@ROWCOUNT> 0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level
FROM tb a,@t_Level b
WHERE a.PID=b.ID
AND b.Level=@Level-1
END
RETURN
END
GO

--调用函数查询002及其所有子节点
SELECT a.*
FROM tb a,f_Cid( '002 ') b
WHERE a.ID=b.ID
/*--结果
ID PID Name
------ ------- ----------
002 001 烟台市
004 002 招远市
--*/

------解决方案--------------------------------------------------------
外键引用,当删除的时候删除。汗。
数据库本来就有的功能呀。
------解决方案--------------------------------------------------------
友情UP一下
------解决方案--------------------------------------------------------
学习
------解决方案--------------------------------------------------------
递啊归
------解决方案--------------------------------------------------------
请参考:
http://www.cnblogs.com/cathsfz/archive/2006/12/12/589464

只要你的表有Path字段,删除所有后代节点就容易了。
  相关解决方案