zoukankan      html  css  js  c++  java
  • 复制指定节点及其所有子节点到指定结点的处理示例(借鉴方式排序法).sql

    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,Level int)
    AS
    BEGIN
     IF @NewID IS NULL
      SELECT @NewID=COUNT(*) FROM TB
     ELSE
      SET @NewID=@NewID-1
     DECLARE @Level int
     SET @Level=1
     INSERT @t(OldID,PID,Level) SELECT ID,@PID,@Level
     FROM tb
     WHERE PID=@ID
     WHILE @@ROWCOUNT>0
     BEGIN
      UPDATE @t SET @NewID=@NewID+1,ID=@NewID
      WHERE Level=@Level
      SET @Level=@Level+1
      INSERT @t(OldID,PID,Level) SELECT a.ID,b.ID,@Level
      FROM tb a,@t b
      WHERE a.PID=b.OldID
       AND b.Level=@Level-1
     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           烟台市
    9           5           青岛市
    10          8           招远市
    --*/

  • 相关阅读:
    mysql 设置自增主键id的起始值
    一文搞定MySQL的事务和隔离级别
    SpringBoot2.0整合Redis
    Redis Cluster搭建高可用Redis服务器集群
    为什么单线程的Redis这么快?
    Spring Boot使用AOP在控制台打印请求、响应信息
    Spring boot集成spring session实现session共享
    SpringBoot项目在IntelliJ IDEA中实现热部署
    Spring Boot入门-快速搭建web项目
    一篇文章搞定SpringMVC参数绑定
  • 原文地址:https://www.cnblogs.com/dushu/p/2509638.html
Copyright © 2011-2022 走看看