您的位置:程序门 -> ms-sql server -> 应用实例



急!!!关于一个触发器问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


急!!!关于一个触发器问题[已结贴,结贴人:wym840713]
发表于:2007-04-06 19:52:34 楼主
我在一个往表a中添加,删除,修改 数据也同时向表b中同步添加,删除,修改,不同的是表b是修改子节点位置的数据,它的上一节数据不变.不会添加最高节点的数据,只会添加子节点数据.请大家帮个忙.分不够再给

code       name
101         a
101001   b
101002   c
102002001   h

表b:

code       name
101         a
101001   a_b
101002   a_c
102002001   a_c_h
发表于:2007-04-06 19:53:331楼 得分:0
刚才数据给错了

code       name
101         a
101001   b
101002   c
101002001   h

表b:

code       name
101         a
101001   a_b
101002   a_c
101002001   a_c_h
发表于:2007-04-06 20:03:442楼 得分:0
我其实就是想如何取到想要添加的节点的前的 "_ ",请问如何能取到
发表于:2007-04-06 21:18:073楼 得分:0
create   trigger   aupdate   on   表a
for   update

as

declare   @name   varchar(30),@code   varchar(100)
select   @name=name,@code=code   from   inserted

update   表b   set   name=@name   +   stuff(name,1,charindex( '_ ',name), ' ')
where   code   like   @code   +   '% '
发表于:2007-04-06 21:19:174楼 得分:0
明天在来看看。。。
发表于:2007-04-06 23:25:125楼 得分:0
还是没有看懂你的意思
发表于:2007-04-07 15:02:446楼 得分:10
--当a表新增时触发
create   trigger   ainsert   on   a
for   insert  
as
begin
insert   into   b   select   *   from   inserted
end
--当a表删除时触发
create   trigger   ainsert   on   a
for   delete  
as
begin
delete   from     b     from   b,deleted   d
where   b.id=d.id
end
发表于:2007-04-07 17:15:277楼 得分:90
--------
/*
昨天说的话还没兑现.呵呵...
我写了个.针对是情况是:增加节点的时候,先增加父项;删除,则先删除子项.
不知道条件对不对了...
*/

create   trigger   t_a   on   a  
for   insert   ,update   ,delete
as
if   not   exists(select   1   from   deleted   )
begin  
if   not   exists   (select   1   from   a   join   inserted   i   on   left(a.code,len(i.code))   =   i.code   )
and   not   exists(select   1   from   inserted   i   join   a   on   left(i.code,len(a.code))   =   a.code   )
begin   --考虑父项插入a表的情况
insert   into   b  
select   *   from   a
end  
if   exists(select   1   from   inserted   i   join   a   on   left(i.code,len(a.code))   =   a.code   )
begin --考虑子项的情况
insert   into   b  
select   i.code,a.name   + '_ '+i.name   from   inserted   i   join   a   on   left(i.code,len(a.code))   =   a.code
end  
end  
if   exists(select   1   from   deleted   d   join   inserted   i   on   d.code   =i.code)
begin  
if   not   exists(select   1   from   inserted   i   join   a   on   left(a.code,len(i.code))   =   i.code)
begin   --考虑不是父项的更新
update   t   set   name   =b.name   + '_ '   +   i.name
from   b   t  
join   inserted   i   on   t.code   =i.code  
join   b   m   on   left(t.code,len(b.code))   =   b.code
end  
end  
if   not   exists(select   1   from   inserted   )
begin   --好像这个是否子项这个条件不重要.
if   not   exists   (select   1   from   deleted   d   join   a   on   left(a.code,len(d.code))   =d.code)
begin   --考虑子项的删除
delete   from   b   where   exists   (select   1   from   deleted   d   where   b.code   =d.code   )
end  
else  
begin   --考虑不是子项的删除
delete   from   b   where   (   exists   (select   1   from   deleted   d   where   b.code   =d.code))
or   (exists   (select   1   from   deleted   d   where   left(b.code,len(d.code))=d.code))
end  
end  
发表于:2007-04-07 17:16:338楼 得分:0
还是一个是父项的更新的触发器还没有写.你自己琢磨琢磨...

先去吃饭了!
发表于:2007-04-09 14:36:189楼 得分:0
父项不要更新   只有子项才回有改到


快速检索

最新资讯
热门点击