sqlserver数据库同一张表数据复制问题

图片说明
如图 id0是后面的父节点, 怎么做到复制一份数据后 p_id 会随着父节点变化 比如此时id为100 p_id也存为100

用数据库代码什么实现?

你这图贴的 列名的看不到

图片说明
真是不好意思 太急了 图没弄好

自己手动添加,没必要像你想的那样做,没什么意义

如图 id0是后面的父节点,--------》这句话什么意思

id跟p_id是一样的吗?

insert into table([is_delete],[type],[name],[p_id],[temp1])
select [is_delete],[type],[name],[id],[temp1] from table

假设table 的 id 为自增长
假设 id 的值 刚好为count(table) - 1
在至少有1条数据以上的时候
insert into table ( is_delete,type,name,p_id) SELECT ( is_delete,type,name,(SELECT COUNT(1)-1 FROM table2)) from table2

给表加个触发器 插入或者修改,都将p_id设置为新增或修改的ID

ALTER TRIGGER [触发器名 ] ON [dbo].[表名]
FOR INSERT, UPDATE
AS
declare @altered_id int
select @altered_id =server_id from inserted

update server
set p_id = @altered_id
where id = @altered_id

你可以用复查的存储过程和触发器实现,不过也可以变更下面很简单的实现。
示例:你需要复制一份 通用模板,就是PID=0的所有记录:

insert into table([is_delete],[type],[name],[p_id],[temp1])
select [is_delete],[type],[name],[p_id],'复制0' --标记复制后新插入的记录
from table
where pid=0

update table set [p_id]=( select id from table where [temp1] ='复制0' and id=pid ) --找到新记录中的父ID
,[temp1]='' --还原temp1
where [temp1] ='复制0'

说明:[temp1]如果有值,可以再灵活加工变通一下,思路是一样的。

insert into table([is_delete],[type],[name],[p_id],[temp1])
select [is_delete],[type],[name],[p_id],'复制0' --标记复制后新插入的记录
from table
where pid=0

update table set [p_id]=( select id from table where [temp1] ='复制0' and id=pid ) --找到新记录中的父ID
,[temp1]='' --还原temp1
where [temp1] ='复制0'