zoukankan      html  css  js  c++  java
  • 复制指定节点及其所有子节点到指定结点的处理示例

    CREATE TABLE tb(ID int,PID int,Name nvarchar(10))
    INSERT tb SELECT 1,NULL,'山东省'
    UNION ALL SELECT 2,1   ,'烟台市'
    UNION ALL SELECT 4,2   ,'招远市'
    UNION ALL SELECT 3,1   ,'青岛市'
    UNION ALL SELECT 5,NULL,'四会市'
    UNION ALL SELECT 6,5   ,'清远市'
    UNION ALL SELECT 7,6   ,'小分市'
    GO

    --节点复制处理函数
    CREATE FUNCTION f_CopyNode(
    @ID     int,      --复制此节点下的所有子节点
    @PID   int,       --将@ID下的所有子节点复制到此节点下面
    @NewID int=NULL   --新编码的开始值,如果指定为NULL,则为表中的最大编码+1
    )RETURNS @t TABLE(OldID int,ID int,PID int)
    AS
    BEGIN
        IF @NewID IS NULL
            SELECT @NewID=COUNT(*)+1 FROM TB
        DECLARE tb CURSOR LOCAL
        FOR
        SELECT ID FROM tb
        WHERE PID=@ID
        OPEN TB
        FETCH tb INTO @ID
        WHILE @@FETCH_STATUS=0
        BEGIN
            INSERT @t VALUES(@ID,@NewID,@PID)
            SET @NewID=@NewID+1
            IF @@NESTLEVEL<32 --如果递归层数未超过32层(递归最大允许32层)
            BEGIN
                --递归查找当前节点的子节点
                DECLARE @PID1 int
                SET @PID1=@NewID-1
                INSERT @t SELECT * FROM f_CopyNode(@ID,@PID1,@NewID)
                SET @NewID=@NewID+@@ROWCOUNT  --排序号加上子节点个数
            END        
            FETCH tb INTO @ID
        END
        RETURN
    END
    GO

    --调用函数将节点1下面的所有子节点复制到节点5下面
    INSERT tb(ID,PID,Name)
    SELECT a.ID,a.PID,b.Name
    FROM f_CopyNode(1,5,DEFAULT) a,tb b
    WHERE a.OldID=b.ID
    SELECT * FROM tb
    /*--结果
    ID          PID         Name       
    ---------------- ----------------- ----------
    1           NULL        山东省
    2           1           烟台市
    4           2           招远市
    3           1           青岛市
    5           NULL        四会市
    6           5           清远市
    7           6           小分市
    8           5           烟台市
    10          5           青岛市
    9           8           招远市
    --*/
  • 相关阅读:
    Java8新特性之Collectors
    java日期的运用(DateUtils工具类)
    正则表达式30分钟入门教程
    一篇非常好的Spring教程
    结合实际需求,在webapi内利用WebSocket建立单向的消息推送平台,让A页面和服务端建立WebSocket连接,让其他页面可以及时给A页面推送消息
    关于企业微信对接内部应用开发,access_token的管理机制和业务接口调用项目实战的八个要点
    企业微信使用DevTools但显示为空白,解决方法
    16.刚体碰撞事件监测与处理
    15.碰撞体
    14.刚体组件Rigidbody
  • 原文地址:https://www.cnblogs.com/shihao/p/2513757.html
Copyright © 2011-2022 走看看