日期:2014-05-18  浏览次数:20588 次

通过表字段和计算公式得到结果的问题
declare   @str_sql   varchar(2000)
declare   @temp   table
(
    A1   int,
    A2   int,
    A3   int,
    formula   varchar(30)
)

insert   into   @temp   values(1,2,3, 'A1+A2+A3 ')  
insert   into   @temp   values(4,2,3, 'A1+A2+A3 ')  
insert   into   @temp   values(1,4,3, 'A1+A2+A3 ')  
insert   into   @temp   values(1,7,3, 'A1+A2+A3 ')  
insert   into   @temp   values(1,2,6, 'A1+A2+A3 ')  
insert   into   @temp   values(1,8,3, 'A1+A2+A3 ')  

select   *   from   @temp  

表@temp中formula是A1、A2、A3的计算公式
怎样返回计算公式的值
最好不要通过游标

------解决方案--------------------
需要游标才行.
------解决方案--------------------
--看來只能跑cursor了

declare @str_sql varchar(2000)
declare @temp table
(
A1 int,
A2 int,
A3 int,
formula varchar(30)
)

insert into @temp values(1,2,3, 'A1+A2+A3 ')
insert into @temp values(4,2,3, 'A1+A2+A3 ')
insert into @temp values(1,4,3, 'A1+A2+A3 ')
insert into @temp values(1,7,3, 'A1+A2+A3 ')
insert into @temp values(1,2,6, 'A1+A2+A3 ')
insert into @temp values(1,8,3, 'A1+A2+A3 ')


declare @a1 int,@a2 int ,@a3 int,@formula varchar(30),@sql varchar(1000)
create table T(A1 int,A2 int,A3 int ,formula int)
declare c1 cursor for
select A1,A2,A3,formula from @temp

open c1
fetch next from c1 into @a1,@a2,@a3,@formula
while @@fetch_status=0
begin
select @formula=replace(replace(replace(@formula, 'A1 ',rtrim(@a1)), 'A2 ',rtrim(@a2)), 'A3 ',rtrim(@a3))
set @sql= 'insert into t select '+rtrim(@a1)+ ', '+rtrim(@a2)+ ', '+rtrim(@a3)+ ', '+@formula
exec (@sql)
fetch next from c1 into @a1,@a2,@a3,@formula
end
close c1
deallocate c1

select * from t
drop table t

/*
A1 A2 A3 formula
----------- ----------- ----------- -----------
1 2 3 6
4 2 3 9
1 4 3 8
1 7 3 11
1 2 6 9
1 8 3 12
*/
------解决方案--------------------
SQl2000,函數不能用exec的...

------解决方案--------------------
可以用类似OPENROWSET之类的~
把取formula定义成函数

不过,这个表结构没有KEY,没法关联
------解决方案--------------------
如果 formula= 'A1+A2+A3 '是不是固定?
------解决方案--------------------
--定义一个计算列的表结构.

declare @str_sql varchar(2000)
declare @temp table
(
A1 int,
A2 int,
A3 int,
formula as a1+a2+a3
)

insert into @temp values(1,2,3)
insert into @temp values(4,2,3)
insert into @temp values(1,4,3)
insert into @temp values(1,7,3)
insert into @temp values(1,2,6)
insert into @temp values(1,8,3)

select * from @temp



------解决方案--------------------