由于时间紧迫,希望高手指教!关于两个表更新数据的问题,要用字段名?!还是有其他的办法?! (50分)

  • 主题发起人 主题发起人 木子小虫
  • 开始时间 开始时间

木子小虫

Unregistered / Unconfirmed
GUEST, unregistred user!
表一 表二
代号 资金项目 金额 代号 办公费用 卫生费用 书报费用
001 办公费用 100.00 001 85.00 5.00 20.00
001 卫生费用 10.00 002 90.00 8.00 15.00
001 书报费用 30.00 ...
002 办公费用 95.00
002 卫生费用 15.00
....如何用表一的金额-->更新表二的数据????要用字段名,SQL语句如何调用????
 
用游标就可以了
 
用储存过程或用视图
 
有没有 可能用SQL的update 语句解决上述问题??
 
只有逐个记录处理
 
to ning_ning: 逐个处理的方式,需要写存储过程,或者有前端发N条update语句进行更新!!
我真的希望能借助一条update语句,然后的事情有数据库去处理!! 呵呵,有点想偷懒!!
 
好象只能为每一个字段逐个赋值
关注!
 
可以分两步:
1。得到需更新的数据
select 金额 from Table1 where 代号='001' and 资金项目='办公费用'
如果需自动将所有的内容更新,可将select语句的条件进行细化
2。更新数据
procedure Update_Table2(Condition,bgfy:String);
Begin
with query2 do
begin
Close;
Sql.Clear;
Sql.Add(Condition);
ParamByName('S_bgfy').AsString:=bgfy;
ExecSql;
End;
End;

bgfy:= query1.FieldByName('yhkl').AsString;
Condition:='update table2 set 办公费用=:S_BGFY where 代号=''001''';
Update_Table2(Condition,bgfy:String);
 
to all:
不知道可不可以写存储过程解决这个问题?? 我的思路是,尽量让大部分工作在后台
数据库处理掉? 减少网络流量!!不过我对存储过程接触较少?希望能得到高手的指点!!
 
直接用sql就行,不过可能在后台做成存储过程速度快一些。
update table T1 set t1.办公费用=t2.资金 from
t1 a,t2 where a.id=t2.id and t2.资金项目='办公费用'
别的两个字段也一样。如果写成存储过程,可以
create procedure procedure_name
as
//上述sql语句
这样就行了,不用什么游标之类的

 
update 表2 set 辦公費用=(select 表1 where 代號=表2.代號 and 資鑫項目='辦公費用')
, 衛生費用=(select 表1 where 代號=表2.代號 and 資鑫項目='衛生費用')


上面只是一個基本思路,供參考.
順便UP一下.
 
请问:木子小虫
你要这样做的目的是不是想做报表,如果是的话,你这样做就缺乏灵活性了,
如果“资金项目”的数量,名称等改动的话,第二个表就必须跟着改动。
这样维护上就会很麻烦。
如果我做,就不会创建表二,而是在需要报告时通过存储过程动态生成。
 
to book523,BADBOYNET:
实际上,表二还有很多“其他费用“。而且表一需要修改的“资金项目“也是不固定的。
可能是要修改表二中的一个项目,也可能是两个,三个。。。带有不确定性!!
to eagle_l:
我不是做报表,其中表二的数据存在数据库中,表一的数据是前端更新提交的。目的是
由后台一次性根据表一的数据更新表二的数据!!

 
下面是我想出来的用游标和EXEC(字符串)实现的方法(for ms sqlserver only):
create procedure [procname] as
declare @s varchar(255)
declare cr cursor for select distinct 资金项目 from 表一
open cr
fetch next cr into @s
while @@FETCH_STATUS = 0
begin
exec('update 表二 set '+@s+'=表一.金额 from 表一 where 表一.代号=表二.代号 and 表一.资金项目='''+@s+''')
fetch next cr into @s
end
close cr
deallocate cr
 
多人接受答案了。
 
后退
顶部