读书人

一个很难的应用需求想了多日无好的解

发布时间: 2012-12-26 14:39:28 作者: rapoo

求助:一个很难的应用需求,想了多日无好的解决方案,在线等答案!
//=====================================================================================
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,我上面列出的只是取了需要计算的字段部分。
[其他解释]
大家的回答都有一定帮助,处理起来不比较蹩足,换了其它思路来设计了。

读书人网 >SQL Server

热点推荐