原理:
插入一条记录后,更新treekey值为 父ID的treekey + 自身ID 不足5位要前面用0补齐
表:test
id parentid name treekey
1 0 山东 00001
4 1 济宁 00001.00004
6 4 曲阜 00001.00004.00006
5 1 济南 00001.00005
2 0 上海 00002
8 2 上海市 00002.00008
3 0 北京 00003
7 3 朝阳区 00003.00007
插入一条记录后,更新treekey值为 父ID的treekey + 自身ID 不足5位要前面用0补齐
表:test
id parentid name treekey
1 0 山东 00001
4 1 济宁 00001.00004
6 4 曲阜 00001.00004.00006
5 1 济南 00001.00005
2 0 上海 00002
8 2 上海市 00002.00008
3 0 北京 00003
7 3 朝阳区 00003.00007
create trigger tr_test
on test
for insert
as
declare @id int,@parentid int,@keyvalue varchar(20)
select @id=id from inserted --查出插入的自身ID
select @parentid=parentid from inserted --查出记录的插入的父ID
if @parentid = 0--如果父ID为0,即是一级目录,则转换为00001这样的格式
set @keyvalue = right('0000' + rtrim(@id),5)
else--这里设置自身应该更新的treekey,值为:父类的keytree + . + 自身的ID
set @keyvalue = convert(varchar(20),(select keyvalue from test
where id = @parentid))+'.'+ right('0000' + rtrim(@id),5)
on test
for insert
as
declare @id int,@parentid int,@keyvalue varchar(20)
select @id=id from inserted --查出插入的自身ID
select @parentid=parentid from inserted --查出记录的插入的父ID
if @parentid = 0--如果父ID为0,即是一级目录,则转换为00001这样的格式
set @keyvalue = right('0000' + rtrim(@id),5)
else--这里设置自身应该更新的treekey,值为:父类的keytree + . + 自身的ID
set @keyvalue = convert(varchar(20),(select keyvalue from test
where id = @parentid))+'.'+ right('0000' + rtrim(@id),5)