请问各位高手如何Delete一棵树

sunrisewhen 2003-08-20 08:53:50
用SQL语句如何Delete一棵树
我的表是这样样的
CREATE TABLE T_Menu(
MenuID //菜单ID
ParentMenuID //父菜单ID
MenuCaption
IconName
MenuURL)
我想把一级菜单Delete掉,下级菜单也要Delete掉
请问各位高手如何Delete?

...全文
27 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
CrazyFor 2003-08-21
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/1375/1375432.xml?temp=.8570978
sunrisewhen 2003-08-21
  • 打赏
  • 举报
回复
能不能给个例子呀?
lonelylight 2003-08-21
  • 打赏
  • 举报
回复
可以使用触发器删除的,但是sqlserver的递归触发器的递归层数有限制。实在不行你可以建立两个表格进行踢皮球式的操作。
sunrisewhen 2003-08-21
  • 打赏
  • 举报
回复
不能用SQL SERVER 触发器、存储过程和函数做一个树的递归删除?
pengdali 2003-08-20
  • 打赏
  • 举报
回复
--建立环境
declare @a table (TC_Id int,TC_PID int,TC_Name varchar(200))
insert @a values(1,0,'中国')
insert @a values(2,0,'美国')
insert @a values(3,0,'加拿大')
insert @a values(4,1,'北京')
insert @a values(5,1,'上海')
insert @a values(6,1,'江苏')
insert @a values(7,6,'苏州')
insert @a values(8,7,'常熟')
insert @a values(9,6,'南京')
insert @a values(10,6,'无锡')
insert @a values(11,2,'纽约')
insert @a values(12,2,'旧金山')

declare @tmp1 table (TC_Id int,TC_PID int,TC_Name varchar(200))

--开始结点
insert @tmp1 select * from @a where tc_ID=10

--循环得到
while exists(select 1 from @a a,@tmp1 b where a.tc_id=b.tc_pID and a.tc_ID not in (select tc_ID from @tmp1))
insert @tmp1 select a.* from @a a,@tmp1 b where a.tc_id=b.tc_pID and a.tc_ID not in (select tc_ID from @tmp1)

--显示结果
select * from @tmp1

--你要删除:
delete @a where TC_Id in (select TC_Id from @tmp1)

这里@a就是你的表@temp1是一表变量。

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧