NPPYQ的学习笔记

每天进步一点点

导航

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字段值

 

代码如下

  

代码


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

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

 

发布成日记了

网页进入博客园

手动更改

还是手动方便呀

posted on 2010-05-24 23:30  NPPYQ  阅读(2888)  评论(0编辑  收藏  举报