有表info,data
info
formulaset 计算公式data
rfnum 公式ID
prosubflag 单元格标识
subjectvalue 数据info 表 formulaset 字段数据格式如下:
R.001.A10*R.001.A25-R.001.A20/(R.001.A26+R.001.A26)/2
解释:
R. 为前缀 无任何意义
R. 后的 001 为 data 表中公式ID
A10 为 data 表中单元格标识
注:公式中最多只存在 + - * / ( ) 六种运算符对于 R.001.A10 的最终数值取数sql为 select subjectvalue from data where rfnum = '001' and prosubflag = 'A10'求计算整个 formulaset 字段结果的方法,存储过程、函数都可
能够兼容 sql server 2000 2005期待高手帮助

解决方案 »

  1.   

    拆分 R.001.A10*R.001.A25-R.001.A20/(R.001.A26+R.001.A26)/2这个字符串 
    下班回家了给你写
      

  2.   

    思路:declare @sql nvarchar(max)
    set @sql=''
    set @sql='
    R.001.A10*R.001.A25-R.001.A20/(R.001.A26+R.001.A26)/2
    '
    set @sql=REPLACE(@sql,'R.','(select subjectvalue from data where rfnum = ''')
    set @sql=REPLACE(@sql,'.',''' and prosubflag=''')
    set @sql=REPLACE(@sql,'+',''')+')
    set @sql=REPLACE(@sql,'-',''')-')
    set @sql=REPLACE(@sql,'*',''')*')
    set @sql=REPLACE(@sql,'/',''')/')
    print @sql
      

  3.   

    这是结果(select subjectvalue from data where rfnum = '001' and prosubflag='A10')*(select subjectvalue from data where rfnum = '001' and prosubflag='A25')-(select subjectvalue from data where rfnum = '001' and prosubflag='A20')/((select subjectvalue from data where rfnum = '001' and prosubflag='A26')+(select subjectvalue from data where rfnum = '001' and prosubflag='A26)')/2
      

  4.   

    參照:sp_OA系列存儲過程,處理數學公式結果
    http://blog.csdn.net/roy_88/article/details/6292123
      

  5.   


    use master;
    go
    if OBJECT_ID('ff','tf') is not null drop function ff
    go
    create function ff (@name nvarchar(20))
    returns @re table  
    (r float)
    begin
    declare @sql nvarchar(max)
    set @sql=@name
    set @sql=REPLACE(@sql,'R.','(select subjectvalue from data where rfnum = ''')
    set @sql=REPLACE(@sql,'.',''' and prosubflag=''')
    set @sql=REPLACE(@sql,'+',''')+')
    set @sql=REPLACE(@sql,'-',''')-')
    set @sql=REPLACE(@sql,'*',''')*')
    set @sql=REPLACE(@sql,'/',''')/')
    exec @sql
    return
    end
      

  6.   


    多谢,问题得以解决,我又在后面追加了两行代码
    set @sql = @sql + ''')'
    set @sql=REPLACE(@sql,')'')','''))')用以解决 )/ 最后翻译成 )')/ 和 结尾缺少 ') 的问题