请老大们帮忙:如何把一张树表的某一节点下所有子节点拷贝到另一张树表的某节点下?

wxdxy 2005-07-19 10:16:37
id(自增)fid(父id)两张表的字段名相同
...全文
265 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxdxy 2005-07-19
  • 打赏
  • 举报
回复
id是自增的,用新的id,不是把id和fid照搬
jiushaoye 2005-07-19
  • 打赏
  • 举报
回复
这怎么拷得过去呀,id 不是重复了吗?
wxdxy 2005-07-19
  • 打赏
  • 举报
回复
表1id fid 表2 id fid
1 0 1 0
2 1 2 1
3 1 3 2
4 2 4 2
5 2 5 3
6 4 6 5
7 6
把表二中id=3的以下节点拷贝到表1id=5的节点下
phantomMan 2005-07-19
  • 打赏
  • 举报
回复
举一些数据看看,比如节点和子节点的表示等
wxdxy 2005-07-19
  • 打赏
  • 举报
回复
感动,盼来了邹建大大,运气真好。这个板块邹建大大关于树的帖子我都看了,受益匪浅。
zjcxc 2005-07-19
  • 打赏
  • 举报
回复
--示例数据
create table t1(id int identity,fid int,Name varchar(10))
insert t1 select 0,'1'
union all select 1,'2'
union all select 1,'3'
union all select 2,'4'
union all select 2,'5'
union all select 4,'6'
union all select 6,'7'

create table t2(id int identity,fid int,Name varchar(10))
insert t2 select 0,'a'
union all select 1,'b'
union all select 2,'c'
union all select 2,'d'
union all select 3,'e'
union all select 5,'f'
GO

--节点复制处理函数
CREATE FUNCTION f_CopyNode(
@ID int, --复制此节点下的所有子节点
@fid int, --将@ID下的所有子节点复制到此节点下面
@NewID int=NULL --新编码的开始值,如果指定为NULL,则为表中的最大编码+1
)RETURNS @t TABLE(OldID int,ID int,fid int,Level int)
AS
BEGIN
IF @NewID IS NULL
SELECT @NewID=MAX(ID) FROM T1
ELSE
SET @NewID=@NewID-1
DECLARE @Level int
SET @Level=1
INSERT @t(OldID,fid,Level) SELECT ID,@fid,@Level
FROM t2
WHERE fid=@ID
WHILE @@ROWCOUNT>0
BEGIN
UPDATE @t SET @NewID=@NewID+1,ID=@NewID
WHERE Level=@Level
SET @Level=@Level+1
INSERT @t(OldID,fid,Level) SELECT a.ID,b.ID,@Level
FROM t2 a,@t b
WHERE a.fid=b.OldID
AND b.Level=@Level-1
END
RETURN
END
GO

--调用函数将节点1下面的所有子节点复制到节点5下面
SET IDENTITY_INSERT t1 ON
INSERT t1(ID,fid,Name)
SELECT a.ID,a.fid,b.name
FROM f_CopyNode(3,5,DEFAULT) a,t2 b
WHERE a.OldID=b.ID
SET IDENTITY_INSERT t1 OFF
SELECT * FROM t1
/*--结果
id fid Name
----------- ----------- ----------
1 0 1
2 1 2
3 1 3
4 2 4
5 2 5
6 4 6
7 6 7
8 5 e
9 8 f

(所影响的行数为 9 行)
--*/
go

drop table t1,t2
drop function f_CopyNode

27,583

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧