弄系统的应该经常碰到子节点、父节点之类的词汇,无论哪一种都是某个表里面的一条记录,所不同的是:子节点记录了父节点的编号信息,父节点只需要记录其下有多少个子节点即可。
父节点对于其下子节点的记录,可以通过两个方法,用SQL来表示如下:
--1、随着添加、删除节点时自动加减
declare @wfid int;--节点编号
set @wfid=100;
update S_WORKFLOWNODE set CHILDNODECOUNT=CHILDNODECOUNT+1 where S_WORKFLOWNODE_=
(select PARENTNODE_ID from S_WORKFLOWNODE where S_WORKFLOWNODE_=@wfid);
--2、不管添加或删除,处理都一样
update S_WORKFLOWNODE set CHILDNODECOUNT=(
select count(S_WORKFLOWNODE_) from S_WORKFLOWNODE where PARENTNODE_ID=(
select PARENTNODE_ID from S_WORKFLOWNODE where S_WORKFLOWNODE_=@wfid) )
where S_WORKFLOWNODE_ =(select PARENTNODE_ID from S_WORKFLOWNODE where S_WORKFLOWNODE_=@wfid));
以上是只知道子节点编号的情况写的,要是知道父节点就更简单了:
--1、随着添加、删除节点时自动加减
declare @wfid int;--节点编号
declare @pwfid int;--父级节点编号
set @wfid=100;
select @pwfid = PARENTNODE_ID from S_WORKFLOWNODE where S_WORKFLOWNODE_=@wfid;
update S_WORKFLOWNODE set CHILDNODECOUNT=CHILDNODECOUNT+1 where S_WORKFLOWNODE_=@pwfid;
--2、不管添加或删除,处理都一样
update S_WORKFLOWNODE set CHILDNODECOUNT=(
select count(S_WORKFLOWNODE_) from S_WORKFLOWNODE where PARENTNODE_ID=@pwfid)
where S_WORKFLOWNODE_ =@pwfid;
第一种方法的操作有个前提条件,就是每次的数据都得对,只要有一次不对,以后的数据都是错的,父节点子级数量的初始化可以用下面的SQL来搞定:
update S_WORKFLOWNODE set CHILDNODECOUNT=aa.COU from (
select count(*) as COU,PARENTNODE_ID as S_ID
from S_WORKFLOWNODE where PARENTNODE_ID>0
group by PARENTNODE_ID
) as aa
where S_WORKFLOWNODE_=aa.S_ID