用一个已知视图更新和插入另外一个表的问题?(用存储过程完成)(本题50分)(0分)

  • 主题发起人 youngyxy
  • 开始时间
Y

youngyxy

Unregistered / Unconfirmed
GUEST, unregistred user!
已知View B: 字段f1,f2,Qty(数值型);(f1,f2)唯一
表A: 字段f1,f2,Qty(数值型),Key(主键)
要求:
1、B中(f1,f2)如果在表A中存在,则更新表A(f1,f2)的对应的Qty变为加上B中的Qty值。
2、如果不存在,则把B中的该纪录增加到表A中,key为自增型,可以不管它。
本题50分。正确者开贴给分
 
UPDATE A
SET A.Qty = A.Qty + B.Qty
FROM A,B
WHERE A.f1 = B.f1 AND A.f2 = B.f2

INSERT A
SELECT * FROM B
WHERE NOT EXISTS
(SELECT * FROM A
WHERE A.f1 = B.f1 AND A.f2 = B.f2
)
 
to fangfei;
谢谢提示。
但是,有问题。例如,
假定A表形如(f1,f2,Qty,Key)的2条纪录如下:(1,1,,1000,81);(3,3,5000,82)
B表形如(f1,f2,Qty)有3条纪录如下:(1,1,2000,);(1,2,1500);(1,3,2500)
则执行后A表成为
(1,1,3000,81),(3,3,5000,82)。
这个结果不完整,少了2条新纪录。
 
那检查一下
SELECT * FROM B
WHERE NOT EXISTS
(SELECT * FROM A
WHERE A.f1 = B.f1 AND A.f2 = B.f2
)
有没有选出记录来
 
当然为空呀
主要是exist (...)为真
所以,WHERE NOT EXISTS
(SELECT * FROM A
WHERE A.f1 = B.f1 AND A.f2 = B.f2
)
逻辑上有问题
 
那我也没办法了,sorry
 
我使用一个临时表,加上标记,完成了。
逻辑上还是清楚,就是花费稍增加。


 
顶部