表结构如下
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
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
不知道怎么设置代码格式和设置摘要
发布成日记了
网页进入博客园
手动更改
还是手动方便呀