SQL Server同期更新親ノードの子ノード数
システムを作るのはよく子ノード、親ノードなどの語彙に出会うべきで、いずれもある表の中の1本の記録で、違いは:子ノードは親ノードの番号情報を記録して、親ノードはその下にどれだけの子ノードがあるかを記録するだけでいいです.
親ノードの子ノードのレコードは、SQLで次の2つの方法で表すことができます.
以上は、子ノード番号しか知らない場合に書かれていますが、親ノードを知っていればもっと簡単です.
1つ目の方法の操作には、毎回のデータが正しいという前提条件があります.一度間違っていれば、以降のデータは間違っています.親ノードのポイントレベルの数の初期化は、次のSQLで行うことができます.
親ノードの子ノードのレコードは、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