复制指定节点及其所有子节点到指定结点的处理示

系统 1659 0

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           招远市
--*/

复制指定节点及其所有子节点到指定结点的处理示例(借鉴方式排序法).sql


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论