SQL Server同期更新親ノードの子ノード数


システムを作るのはよく子ノード、親ノードなどの語彙に出会うべきで、いずれもある表の中の1本の記録で、違いは:子ノードは親ノードの番号情報を記録して、親ノードはその下にどれだけの子ノードがあるかを記録するだけでいいです.
親ノードの子ノードのレコードは、SQLで次の2つの方法で表すことができます.
--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;

 
1つ目の方法の操作には、毎回のデータが正しいという前提条件があります.一度間違っていれば、以降のデータは間違っています.親ノードのポイントレベルの数の初期化は、次の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