table:
t_news_sort
字段:
id
ParentId
SortName
path一个分类表,path是我后加的字段,现在我想当执行insert 或update时,可以记录下这个树的路径,path
的路径应该是象下面这样
其数据为
id parentid sortname path
1 0 t1 1
2 1 t1_1 1,2
3 2 t1_1_1 1,2,3.......请问高手应该如何写?
t_news_sort
字段:
id
ParentId
SortName
path一个分类表,path是我后加的字段,现在我想当执行insert 或update时,可以记录下这个树的路径,path
的路径应该是象下面这样
其数据为
id parentid sortname path
1 0 t1 1
2 1 t1_1 1,2
3 2 t1_1_1 1,2,3.......请问高手应该如何写?
1 0
2 03 0,1
4 0,1
5 0,1,3
6 0,1,3
5的父节点是 3 ,5的父节点是 1 。那么我想显示 1的所有节点,加一个 like 就可以了 , like '0,1%'。
on tablename
for insert,update
as
set nocount on
if update (id) or update(parentid)
begin
update a
set path=b.path+','+cast(a.id as varchar)
from tablename a,tablename b,inserted i
where a.id=i.id
and a.parentid=b.id
end
gops:最好不要打开数据的的递归触发器选项再PS:应该限制已经有下级的记录的parentid修改,如果允许修改,那就会要求触发器可能修改本记录以及其下级的记录的path,以上触发器未实现这个功能
等高手来写吧~~
insert 时简单点
update 难实现
^_^ ^_^ ^_^
on tablename
for insert,update
as
set nocount on
declare @t table (
id int,
path varchar(50),
lev int
)declare @lev int
set @lev=0if update (id) or update(parentid)
begin
insert @t
select a.id,b.path+','+cast(a.id as varchar),0
from tablename a,tablename b,inserted i
where a.id=i.id
and a.parentid=b.id
while exists (select 1 from @t a,tablename b where a.id=b.parentid and a.lev=@lev)
begin
insert @t
select a.id,b.path+','+cast(a.id as varchar),@lev+1
from tablename a,@t b
where a.parentid=b.id
and b.lev=@lev
set @lev=@lev+1
end
update a
set path=b.path
from tablename a,@t b
where a.id=b.id
end
go
以上所写都是在原有数据的path是正确的情况下的,如果你的数据尚未正确,建议在把数据该正确后再挂上触发器,触发器只能做到在正确的情况下保持正确,不能在不正确的情况下更正正确。 修改数据可以考虑用函数,求path的函数应该再有很多人写过,这里不多写了