首页 新闻 会员 周边 捐助

使用存储过程如何递归的修改树形节点中的值?

0
悬赏园豆:20 [待解决问题]

表的结构:

      表的字段包括ID、ParentId、Name和PathName。Id唯一标示,ParentId父节点的ID,Name表示当前节点名称,PathName表示从根节点到本节点的Name的连接字符串。

问题:

       当修改及属性某个节点的Name时,也要把子节点的PathName修改,用存储过程如何实现?

扎伊尔天雕的主页 扎伊尔天雕 | 初学一级 | 园豆:7
提问于:2014-10-30 00:25
< >
分享
所有回答(5)
0

declare @newname varchar(50)

declare @oldname varchar(50)
set @newname = 'aa'

set @oldname= 'bb'

update test1 set Name = REPLACE(PathName,@oldname,@newname)
where name like '%'+@oldname+'%'

不用递归好不好?

 

另外数据库设计的个人觉得有点问题

id是唯一的,应该也是identity列吧  且还是主键吧

为什么path不把 id 串联起

而选择 将可变的 name 属性来串联 ??

 

 

算了 | 园豆:3 (初学一级) | 2014-10-30 00:53

哦 也是 菜鸟,,说的不到的  还请谅解

支持(0) 反对(0) 算了 | 园豆:3 (初学一级) | 2014-10-30 00:56
0

只想告诉楼主,其实存储过程也是支持递归的。这样的提示我想足够了吧?!

爱编程的大叔 | 园豆:30844 (高人七级) | 2014-10-30 07:43

表示,我干这事也是用存储过程递归,哈哈~

支持(0) 反对(0) 幻天芒 | 园豆:37205 (高人七级) | 2014-10-30 09:10
0

可以添加数据库自定义函数啊!  function   xx   妥妥的。调函数就行。while循环!你值得拥有!

大楚打码人 | 园豆:4313 (老鸟四级) | 2014-10-30 09:38
0

;with dtr as( select a from table1 union all select a from dtr)select * from dtr

这样写对吗?最近刚看到这样的形式

焰£天琊 | 园豆:418 (菜鸟二级) | 2014-10-30 10:50
0

把ID串起来才是对的,这个NAME本来就有可能经常改,但是ID是不会变的。

Alex_QY1987 | 园豆:1888 (小虾三级) | 2014-10-30 14:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册