请教用SQL 的update进行更新数据问题 (100分)

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

yifawu

Unregistered / Unconfirmed
GUEST, unregistred user!
通过用sql 的update 语句,用一个表的数据去更新另一个表,
因为一个update 语句一次只能使被更新的表的一条记录修改一次,
如: 要求更新的表为A表,提供更新数据的表为B表,使用下列语句:

update A
set A_amount=A_amount+B.amount
from A,B
where A.code=B.code

如果B表中有多条记录与A表相匹配,但是B表中只有第一条记录被更新到A表中,怎样使B表中的全部记录更新到A表中?
设A.code 字段为Primary key.
 
应该没问题.
UPDATE [order details]
SET quantity = quantity + orders.freight
FROM [Order Details], orders
WHERE [Order Details].orderid = orders.orderid
更新了2155行.
(SQL SERVER)
 
declare @Sum int,
@Code int
select @Sum=sum(b.Amount)
from B
order by Code

update A
set a.amount=a.amount+@Sum
where a.code=b.code
 
可能还有其他什么方法
 
yifawu1 和 yifawu 是一个人吗?
 
如果gxg8816的回答不能满意
就只有用游标了,只是效率。。。。
declare @tamount integer
declare your_cur cursor
for select amount from b where....
open your_cur
fetch your_cur into @tamount
while @@fetch_status=0
begin
update a set A_amount=A_amount+@tamount
where A.code=@tamount
fetch your_cur into @tamount
end
 
我现在没有环境测试:

upate A
set A_amount=A_amount+C.amount
from A,(Select code,sum(B.amount) amount
from B
group by B.code) C
where A.code=C.code
 
你如果使用Ms sql,上面正确否我就不知到了.
 
是把B中同A相连的记录的sum 更新到A吗?
如果是,沈是对的
如下语句测试通过.
UPDATE orders SET orders.freight = orders.freight + C.amount
FROM orders,
(SELECT orderid, SUM([order details].quantity) AS amount
FROM [order details]
GROUP BY [order details].orderid) C
WHERE orders.orderid = C.orderid
 
俺的有什么问题?
只是想知道,因为我也没sql server环境。
 
谢谢gxg8816.原来Oracle与Ms sql得sql语句差不多。

To g622:
你是副还少了一个cursor与循环。
 
g622 也基本正确,修改如下,测试通过

CREATE PROCEDURE g622 AS
declare @tamount integer
declare @tcode varchar(20)
declare your_cur cursor for select orderid,quantity from [order details]
open your_cur
fetch next from your_cur into @tcode,@tamount
while @@fetch_status=0
begin
update orders set orders.freight=orders.freight+@tamount
where orders.orderid=@tcode
fetch next from your_cur into @tcode,@tamount
end

 
fetch next from your_cur into @tcode,@tamount 改为
fetch first from your_cur into @tcode,@tamount
 
update A set A_amount=A_amount+
( select sum(B.amount) from B where A.code=B.code )

可以吗
 
在DELPHI 中,用query 更新
如:
update ta1.db set ta1.a1='100' 出现
'error creating cursor handle '
why ?
 
呵呵,应该使用ExecSQL.
 
沈前卫:
   我用的是本地数据库(PARADOX),肯定用了EXECSQL,在执行PREPARE或EXECSQL时报错,请各位大虾试一下,并帮在下解决这个小问题,YIFAWU,对不起,沾您的光了!
 
多人接受答案了。
 
后退
顶部