sql使用递归更新树级表记录

 

表结构如下

ORG_INFO

ORG_ID,ORG_PARENT_ID,ORG_PARENT_PATH

其中需更新ORG_PARENT_PATH字段,该字段值为父节点的ORG_PARENT_PATH+’.’+父节点的ORG_ID

 

思路

先找出根节点,设置好其ORG_PARENT_PATH

依次递归找出子节点,更新ORG_PARENT_PATH字段值

 

代码如下

  

ExpandedBlockStart.gif 代码


Declare   @Id   nvarchar ( 36 )  
Set   @Id   =   ' 549C2E32-3927-4E5E-AA26-993B460D067A ' -- -在此修改父节点  

With  RootNodeCTEee(ORG_ID,ORG_PARENT_ID,ORG_PARENT_PATH)  
As   
(  
    
Select  ORG_ID,ORG_PARENT_ID,ORG_PARENT_PATH  From  ORG_INFO  Where  ORG_ID  In  ( @Id )  
    
Union   All   
    
Select  ORG_INFO.ORG_ID,ORG_INFO.ORG_PARENT_ID,ORG_INFO.ORG_PARENT_PATH  From  RootNodeCTEee  
        
Inner   Join  ORG_INFO
        
On  RootNodeCTEee.ORG_ID  =  ORG_INFO.ORG_PARENT_ID
)
select   *   into  #T  from  RootNodeCTEee
-- select * from #T 
declare   @ORG_ID   varchar ( 36 --
declare   @ORG_PARENT_ID   varchar ( 36 --
declare   @ORG_PARENT_PATH   varchar ( 512 --
declare   @TempORG_PARENT_PATH   varchar ( 512 --
Declare  row  Cursor   For      -- 声明游标row 
Select  ORG_ID,ORG_PARENT_ID,ORG_PARENT_PATH  From  #T --
--
select * from RootNodeCTEee 

Open  row   
Fetch   Next   From  row  into   @ORG_ID , @ORG_PARENT_ID , @ORG_PARENT_PATH     --
Fetch   Next   From  row  into   @ORG_ID , @ORG_PARENT_ID , @ORG_PARENT_PATH     --
While   @@FETCH_STATUS   =   0                -- 完成状态
begin
print ( @ORG_ID + ' __ ' + @ORG_PARENT_ID + ' __ ' + @ORG_PARENT_PATH )
select   @TempORG_PARENT_PATH =  ORG_PARENT_PATH  +   ' . ' + ORG_ID  from  ORG_INFO  where  ORG_ID = @ORG_PARENT_ID   
update  ORG_INFO  set  ORG_PARENT_PATH  =   @TempORG_PARENT_PATH   where  ORG_ID  =   @ORG_ID  

Fetch   Next   From  row  into   @ORG_ID , @ORG_PARENT_ID , @ORG_PARENT_PATH  

end
Close  row
Deallocate  row 

drop   table  #T 

 

 

总结

使用With可以递归查找数据生成表

当然也可以直接写SP完成

首次使用LiveWriter

不知道怎么设置代码格式和设置摘要

 

发布成日记了

网页进入博客园

手动更改

还是手动方便呀

转载于:https://www.cnblogs.com/pengyq/archive/2010/05/24/1743148.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值