首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一个很难的应用需求,想了多日无好的解决方案,答案

2012-12-26 
求助:一个很难的应用需求,想了多日无好的解决方案,在线等答案!//

求助:一个很难的应用需求,想了多日无好的解决方案,在线等答案!
//=====================================================================================
C# + SQL SERVER2005环境

1、表A(只有一行数据,称为公式参数表,H表示高度,W表示宽度,L表示长度)
A01(H)  |  A02(W) |  A03(L)
---------------------------
100     |  200     |  300

2、表B(表达式表,B01,B02,B03是表达式描述字段,B04,B05,B06是B01,B02,B03分别对应的值字段)  
B01     |      B02         |     B03     |     B04    |    B05    |    B06 
-------------------------------------- 
H/5     |      (W-H)*1.5   |     L+20    |            |           |  
W+2     |      H*5         |     20+L/2  |            |           |  
....

3、欲根据表A来得到表B中的表达式的值,即得到如下结果:
B01     |      B02         |     B03     |     B04    |    B05    |    B06 
-------------------------------------- 
H/5     |      (H-W)*1.5   |     L+20    |     20     |    1500   |    320
W+2     |      H*5         |     20+L/2  |     102    |    500    |    170
....

说明:即将B01的计算结果更新到B04字段,B02-B05, B03-B06 对应。
SQL语句或者用存储过程如何实现,或者不好处理的话在C#里如何实现?
[最优解释]
试试和不合用
[其他解释]
连接就可以了啊

update B  set B04 = A.A01 /5  ,
          B05 = (A.A01 - A.A02) *1.5,
              B06 = A.A03 + 20
from A
 
[其他解释]
下面是取一条记录处理的,多条循环即可:
declare @B01 varchar(20),@B02 varchar(20),@B03 varchar(20)
declare @tb table(F varchar(20),v int)
select @B01=b01,@B02=B02,@B03=B03
from B 
where 主键='XXX'
set @B01='select ''B04'''+replace(replace(REPLACE(@B01,'100','H'),'200','W'),'300','L')
set @B02='select ''B05'''+replace(replace(REPLACE(@B02,'100','H'),'200','W'),'300','L')
set @B03='select ''B06'''+replace(replace(REPLACE(@B03,'100','H'),'200','W'),'300','L')


insert into @tb
exec(@B01)
insert into @tb
exec(@B02)
insert into @tb
exec(@B03)
update B set B04=(select v from @tb where F='b04'),B05 ...
where 主键='xxx'

[其他解释]
分开两个表可以合在一起先运算再update啊,那个博客里面的其实和你的背景挺相似的。
[其他解释]
纠正下:
set @B01='select ''B04'','+replace(replace(REPLACE(@B01,'100','H'),'200','W'),'300','L')
set @B02='select ''B05'','+replace(replace(REPLACE(@B02,'100','H'),'200','W'),'300','L')
set @B03='select ''B06'','+replace(replace(REPLACE(@B03,'100','H'),'200','W'),'300','L')
[其他解释]

引用:
试试和不合用

谢谢,这个还不太合适,我的参数和表达式在分开的两个表里,我在界面端处理拼凑好sql语句后直接传入存储过程,由于数据太多超过每次执行的字数,执行报错。
有几十条这样的update语句:
update....
update...
.....
这样结果可以出来,但是数据一多就出问题了。
[其他解释]
这个问题不难解决,思路就是逐个表达式取出来 处理。B表是否有主键?
[其他解释]
引用:
连接就可以了啊

SQL code1234update B  set B04 = A.A01 /5  ,          B05 = (A.A01 - A.A02) *1.5,              B06 = A.A03 + 20from A

我表达式B01,B02,B03里是纯字符L,W等等,有的也可能不有,直接就是值了,还要涉及到替换,总之各种别扭,这样貌似是不行的,我之前有试过。
[其他解释]
引用:
这个问题不难解决,思路就是逐个表达式取出来 处理。B表是否有主键?

B表有主键的,是其它字段B00,我上面列出的只是取了需要计算的字段部分。
[其他解释]
大家的回答都有一定帮助,处理起来不比较蹩足,换了其它思路来设计了。

热点排行