日期:2014-05-17  浏览次数:20563 次

触发器同步更新
create trigger tri_a_b on table_5
after insert 
as
    declare @name VARCHAR(50),@result VARCHAR(50)
begin
    select @name=name,@result=result from table_5; 
    insert into table_4(name,result) values(@name,@result);
    update table_4 set result=table_5.result from table_4,table_5 where table_4.name=table_5.name
end;

我写的这个方法,可以同步插入,但同步更不不行了。

我想要实现的功能是:当table_5插入一条新数据,table_4也同时插入一条数据,当table_5对数据进行更新的时候,table_4也同时进行更新
求高手指点!
------解决方案--------------------
更新的字段是不是固定的 还无论更新哪个字段 就更新过去?

------解决方案--------------------
更新需要新创建个更新触发器:
create trigger tri_a_b_update on table_5
 for update
 as
begin
update table_4 set result=table_5.result from table_4,inserted as table_5 
where table_4.name=table_5.name
 end;
 
------解决方案--------------------
create trigger tri_a_b_update on table_5
  for update
  as
 begin
if update(result)
 update table_4 set result=table_5.result 
from table_4,inserted as table_5 
 where table_4.name=table_5.name
 end
------解决方案--------------------
create trigger tri_a_b on table_5
after update
as
    declare @name VARCHAR(50),@result VARCHAR(50)
begin
if update(result)
  begin
    select @name=name,@result=result from table_5; 
    update table_4 set result=table_5.result from table_4,table_5 where table4.name=table_5.name
  end;
end;

------解决方案--------------------
第一、要使用修改触发器
第二、最好是设置好修改哪个字段(if update(字段名))
第三、最好是加上
if exists (select a.* from inserted a,deleted b where a.name=b.name and isnull(a.result,'')<>isnull(b.result,''))
这句可以判断ruselt字段修改进来的新值是否和原来的值不一样,不一样了才做更新操作,否则不处理。
触发器改成这样子,
create trigger tri_a_b on table_5
after update
as
    declare @name VARCHAR(50),@result VARCHAR(50)
begin
if update(result)
  begin
   if exists (select a.* from inserted a,deleted b where a.name=b.name and isnull(a.result,'')<>isnull(b.result,''))
     begin 
    select @name=name,@result=result from table_5; 
    update table_4 set result=table_5.result from table_4,table_5 where table4.name=table_5.name
     end
  end
end