日期:2014-05-17  浏览次数:20532 次

求助:一个很难的应用需求,想了多日无好的解决方案,在线等答案!
//=====================================================================================
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')