Select *,Replace(Formula,'value',20) as tt From APMS.dbo.Formulas
Value          Formula
0.0000254*20 0.0000254*Value
0.0254*20          0.0254*Value
0.0000157*20 0.0000157*Value
(20-32)*5.0/9.0 (Value-32)*5.0/9.0
(9.0/5.0)*20+32 (9.0/5.0)*Value+32
希望能 Value 能得出具体的值? SQL怎么写啊

解决方案 »

  1.   

    给你写了一段代码,希望对你能有帮助。declare @sql varchar(1000),@sql1 varchar(1000)
    set @sql='20*20'
    set @sql1='select value='+@sql
    exec (@sql1)
      

  2.   

    参考:动态计算表中公式:http://blog.csdn.net/htl258/archive/2010/05/13/5588454.aspx
      

  3.   

    --> 测试数据: [tb]
    if object_id('[tb]') is not null drop table [tb]
    create table [tb] ([Value] varchar(15),Formula varchar(18))
    insert into [tb]
    select '0.0000254*20','0.0000254*Value' union all
    select '0.0254*20','0.0254*Value' union all
    select '0.0000157*20','0.0000157*Value' union all
    select '(20-32)*5.0/9.0','(Value-32)*5.0/9.0' union all
    select '(9.0/5.0)*20+32','(9.0/5.0)*Value+32'
    godeclare @sql varchar(max)
    select @sql=isnull(@sql+' union all ','')+'select [value]='''+[value]+''',[formula]='''+Formula+''',result='+replace(formula,'value',[value]) from [tb]
    exec(@sql)--结果:
    value           formula            result
    --------------- ------------------ ---------------------------------------
    0.0000254*20    0.0000254*Value    0.00000001290320
    0.0254*20       0.0254*Value       0.01290320000000
    0.0000157*20    0.0000157*Value    0.00000000492980
    (20-32)*5.0/9.0 (Value-32)*5.0/9.0 -21.48148111110000
    (9.0/5.0)*20+32 (9.0/5.0)*Value+32 128.80000000000000
      

  4.   


    谢谢你的方法,我已经在Sql2000上实现了你的方法。上面说你的答案不正确是说你的result结果可能与楼主希望的不符合。我只是不明白为什么非要把value字段选出来,才能实现这个功能呢?我会另外开一个帖子问你的。希望不吝指教。
      

  5.   

    Declare @str varchar(400)
        select @str=replace(Formula,'Value','20') From APMS.dbo.Formulas where ID=217
    print(@str)
        declare @re decimal(18,2)
        declare @err int,@src varchar(255),@desc varchar(255)
        declare @obj int
        exec @err=sp_oacreate 'MSScriptControl.ScriptControl',@obj out
        if @err<>0 goto lb_err
        exec @err=sp_oasetproperty @obj,'Language','vbscript'
        if @err<>0 goto lb_err
        exec @err=sp_oamethod @obj,'Eval',@re out,@str
        if @err=0 print(@re)
        lb_err:
        exec sp_oageterrorinfo NULL, @src out, @desc out 
        declare @errb varbinary(4),@s varchar(20)
        set @errb=cast(@err as varbinary(4))
        exec master..xp_varbintohexstr @errb,@s out
        --return('ErrorID: '+@s+char(13)+'ErrorSource: '+@src+char(13)+'ErrorDis '+@desc)
      print('ErrorID: '+@s+char(13)+'ErrorSource: '+@src+char(13)+'ErrorDis '+@desc)1*20
    ErrorID: 0x800401F3
    ErrorSource: ODSOLE Extended Procedure
    ErrorDis  Invalid class string
      

  6.   

    create table [tb112] ([Value] varchar(15),Formula varchar(18))
    insert into [tb112]
    select '0.0000254*20','0.0000254*Value' union all
    select '0.0254*20','0.0254*Value' union all
    select '0.0000157*20','0.0000157*Value' union all
    select '(20-32)*5.0/9.0','(Value-32)*5.0/9.0' union all
    select '(9.0/5.0)*20+32','(9.0/5.0)*Value+32'select * from [tb112]declare @ss varchar(max)
    declare @ss1 varchar(max)
    declare @i int
    set @ss1=''
    --set @ss='select @ss1=@ss1+value from  [tb112]'
    select @ss1=@ss1+' select '+value+' union all ' from  [tb112]
    set @i=len(rtrim(@ss1))
    set @ss1=substring(@ss1,1,@i-9)
    exec (@ss1)