`

SQL Server 同步更新父节点下的子节点数量

阅读更多

弄系统的应该经常碰到子节点、父节点之类的词汇,无论哪一种都是某个表里面的一条记录,所不同的是:子节点记录了父节点的编号信息,父节点只需要记录其下有多少个子节点即可。

父节点对于其下子节点的记录,可以通过两个方法,用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

 

分享到:
评论

相关推荐

    SQL SERVER 2000开发与管理应用实例

    8.2.3 查找子节点 244 8.2.4 查找父节点 245 8.2.5 编码校验 246 8.2.6 节点复制 249 8.2.7 节点删除 251 8.2.8 逐级汇总 253 8.3 树形数据的扩展形式 256 8.3.1 产品配件清单 256 8.3.2 ...

    sqlserver2000基础(高手也有用)

    8.2.4 查找父节点 245 8.2.5 编码校验 246 8.2.6 节点复制 249 8.2.7 节点删除 251 8.2.8 逐级汇总 253 8.3 树形数据的扩展形式 256 8.3.1 产品配件清单 256 8.3.2 公交车乘车线路查询 258 第 9 章...

    treeView连接sql2005

    每个节点可以代表一个类别或对象,节点下可以有子节点,形成层级结构。`TreeView`控件支持自定义图标、展开/折叠功能以及节点操作(如添加、删除、移动)。 2. **SQL Server 2005** SQL Server 2005是Microsoft...

    树形结构(增删改查刷新等功能附SQL脚本)

    - **添加**:在树形结构中添加新的节点,可能涉及选择插入位置、创建新节点、更新父节点的子节点列表等步骤。 - **删除**:删除指定节点,需要考虑其子节点的归属问题,以及更新所有受影响的父节点。 - **修改**...

    Treeview在winform中的运用(从数据库动态添加节点,增加节点、删除节点、复制节点)

    如果是在用户交互时动态增加,可以通过监听Treeview的`AfterSelect`事件,当用户选择一个节点时,在该节点下添加新的子节点。确保更新节点的数据源以保持同步。 3. **删除节点** 删除节点可以通过选中目标节点后...

    treeview动态添加节点内容 立刻保存至数据库

    // 获取父节点ID(如果没有父节点,则为NULL) int? parentID = parentNode == null ? null : (int?)parentNode.Tag; // 新建节点记录 int newNodeID = ...; // 生成新的ID string newNodeText = newNode.Text; // ...

    专门用来操作Treeview和数据库

    例如,每一行数据可以对应一个父节点,每列数据可以作为子节点。 结合`TreeView`和数据库: 1. 当需要将数据库中的数据展示在`TreeView`时,可以先执行查询,然后遍历结果集,根据数据结构创建`TreeNode`对象,并...

    Geodatabase 9.2 的数据复制技术

    Replicas 既可以做为父节点发起同步请求,也可以作为子节点接收同步更新。这种双向的同步机制使得数据能够在不同的 Geodatabase 之间高效且准确地流动。 综上所述,Geodatabase 复制技术不仅能够帮助组织实现在不同...

    TreeView与数据库关联例子.rar_database treeview_delphi treeview_treeview_

    TreeView控件由节点(Nodes)组成,每个节点可以有子节点,形成树状结构。在Delphi中,`TTreeView`是实现这一功能的主要组件,它提供了添加、删除、展开和折叠节点等功能。 1. **数据库连接**:在实现TreeView与...

    总结问题集合

    这条SQL语句将从ID为10的记录开始,递归地查找其所有子节点,直到树状结构的最底层。 ### 4. SQL Limit 和 Rownum 在SQL查询中,`LIMIT`和`Rownum`用于限制返回的结果集大小。在MySQL中,你可以使用`LIMIT`来指定...

    1000道 互联网Java工程师面试题 485页

    - **路径表示**:路径以斜线(/)开头,节点名称由父节点和节点名组成。 #### 3、ZAB协议 - **协议类型**:分为两种模式,一种是在正常模式下的ZAB协议,另一种是在恢复模式下的选主协议。 - **功能**:保证所有...

    C#编程经验技巧宝典

    C#编程经验技巧宝典源代码,目录如下: 第1章 开发环境 1 <br>1.1 Visual Studio开发环境安装与配置 2 <br>0001 安装Visual Studio 2005开发环境须知 2 <br>0002 配置合适的Visual Studio 2005...

    spring security 参考手册中文版

    40.3.4 Microsoft SQL Server 279 40.3.5 Oracle数据库 280 41.安全命名空间 282 41.1 Web应用程序安全性 282 41.1.1 <debug> 282 41.1.2 <http> 282 属性 283 的子元素 285 41.1.3 <access-denied-handler> 286 的...

Global site tag (gtag.js) - Google Analytics