在Sql server有两表  "供应商清单"和“零件清单"
供应商清单中有一个字段为"供应商名称", 用来保存所有的供应商名称
零件清单中有二个字段分别为"供应商一",供应商二",供应商一与供应商二都包含在供应商名称中.
在”供应商清单”中当某一供应商名称更改时,
如何让"零件清单"中的供应商一与供应商二同步更新!注:更改的供应商名称可能出现在供应商一中,也可能出现在供应商二中
我用Foreign Key设置,使得供应商一可能自动更新,
但Sql Server不允许用外键同时更新另一张表中的二个字段
请问如何解决这个问题!!十分感谢!!

解决方案 »

  1.   

    在SQL中的触发器不太熟,但可在DELPHI中实现你的要求,首先加两控件:ADOTABLE1(tablename为"供应商清单")和ADOQUERY1,在单元的var处插入 str1:string;
    procedure TForm1.ADOTable1BeforeEdit(DataSet: TDataSet);
    begin
      str1:=ADOTable1.FieldByName('供应商名称');
    end;procedure TForm1.ADOTable1AfterPost(DataSet: TDataSet);
    begin
      with adoquery1 do
      begin
        sql.close;
        sql.clear;
        sql.add('update all 零件清单 set 供应商一='+#39+adotable1.FieldByName('供应商名称')+#39+' where 供应商一='+#39+str1+#39);
        execsql;
        sql.close;
        sql.clear;
        sql.add('update all 零件清单 set 供应商二='+#39+adotable1.FieldByName('供应商名称')+#39+' where 供应商二='+#39+str1+#39);
        execsql;
      end;
    end;
      

  2.   

    可以级联更新.也可以用触发器.把名称字段设为主键,然后再把其它表中与这个字段相关的字段设置为外建,选了级联更亲即可以了.
    Create trigger up4T1
    on table1
    for update
    if update(名称)
       update tabel2 set 名称=I.名称 From Inserted i,deleted D where tabel2.名称=D.名称这样应该可以
      

  3.   

    谢谢  jxc163(一水寒) 
    你说的方法OK!!
    谢谢
      

  4.   

    但是对Table1修改的时候
    常常会出错,显示"键列信息不足或不正确,更新影响到过多的行!"
    请问是怎么回事!?