数据字段关联更新的问题,一直解决不了!!

SolarMoon 2003-10-18 04:10:35
在Sql server有两表 "供应商清单"和“零件清单"
供应商清单中有一个字段为"供应商名称", 用来保存所有的供应商名称
零件清单中有二个字段分别为"供应商一",供应商二",

供应商一与供应商二都包含在供应商名称中.
在”供应商清单”中当某一供应商名称更改时,
如何让"零件清单"中的供应商一与供应商二同步更新!

注:更改的供应商名称可能出现在供应商一中,也可能出现在供应商二中
我用Foreign Key设置,使得供应商一可能自动更新,
但Sql Server不允许用外键同时更新另一张表中的二个字段
请问如何解决这个问题!!

十分感谢!!
...全文
67 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
SolarMoon 2003-10-31
  • 打赏
  • 举报
回复
但是对Table1修改的时候
常常会出错,显示"键列信息不足或不正确,更新影响到过多的行!"
请问是怎么回事!?
SolarMoon 2003-10-31
  • 打赏
  • 举报
回复
谢谢 jxc163(一水寒)
你说的方法OK!!
谢谢
jxc163 2003-10-28
  • 打赏
  • 举报
回复
可以级联更新.也可以用触发器.

把名称字段设为主键,然后再把其它表中与这个字段相关的字段设置为外建,选了级联更亲即可以了.


Create trigger up4T1
on table1
for update
if update(名称)
update tabel2 set 名称=I.名称 From Inserted i,deleted D where tabel2.名称=D.名称

这样应该可以
b51 2003-10-27
  • 打赏
  • 举报
回复
是不是可以用视图来做呢
SolarMoon 2003-10-27
  • 打赏
  • 举报
回复
能不能说得详细点啊!!!
119119 2003-10-18
  • 打赏
  • 举报
回复
建议用促发器,那样代码要少很多,而且速度也快。
gdwyh 2003-10-18
  • 打赏
  • 举报
回复
sql.close应该是close
gdwyh 2003-10-18
  • 打赏
  • 举报
回复
在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;
47522341 2003-10-18
  • 打赏
  • 举报
回复
用触发器写;

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧