如图 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'