一般现在很多公司都是用excel完成简单的运算,但如果是sql开发的数据库系统,就麻烦了,公式这些都是在设计时写到代码或者存储过程中的,根本没法在运行时就行补充。有木有好点的办法啊?

解决方案 »

  1.   


    字段b=IF(字段a>1,5,10)在excel可以这样,你说的存储过程应该怎样开始,可以给点提示吗?
      

  2.   

    case when 字段a>1 then 5 else 10 end as 字段B
      

  3.   

    刚才在看一个大神的回复,对你这个问题有点启发哦:
    你可以在数据库中新建一个function,将公式写在这个function里面,然后在新建一个表,将其中的某个字段的default值设为这个你刚新建的函数,这样这个字段就会被自动处理了。
      

  4.   

    参考:
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_calc]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_calc]
    GO/*--计算给定算术表达式(公式)的值
        计算给定算术表达式的值
        此方法由VB版hhjjhjhj(大头) 
        提供的VB处理程序程序上改造而来
        --邹建2004.07(引用请注明此信息)--*/
        /*--调用示例
        select dbo.f_calc('123+456')
    --*/create function f_calc(
    @str varchar(1000)   --要计算的表达式
    )returns sql_variant
    as
    begin
        declare @re sql_variant
        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 return(@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('错误号: '+@s+char(13)+'错误源: '+@src+char(13)+'错误描述: '+@desc)
    end
    go
      

  5.   

    同意此做法,可以利用sql的系统函数及自定义函数,写一个使用手册,无非是要输入规范化的参数.
      

  6.   


    这个办法可以,但问题要在程序运行的期间输入这些函数及自定义函数及sql代码,应该怎么处理呢?