使用SQL计算/评估用户定义的公式

时间:2016-12-01 15:13:52

标签: sql sql-server tsql

我有一个表,其中包含用户定义的计算公式和另一个保存值的表。我需要将值注入计算公式,以便能够评估公式并返回结果。

“公式”表中名为“计算公式”的列行中的示例公式

(310165)/(7248+7249)

这些数字代表值表

中对应的ValueID
ValueID | Value
7248    | 18521
7249    | 3835
310165  | 68546.24

我需要找到一种使用SQL的方法,通过匹配Values表中的ValueID,将Value注入到Formulas表的公式中。

我看过替换和东西以及xml路径,我似乎无法找到一种方法来完成这项工作。完成此操作后,我需要评估使用实际值生成的表达式以返回int值。任何帮助是极大的赞赏。

1 个答案:

答案 0 :(得分:1)

此更新将动态处理整个表。请注意@Formulas,我添加了一个ID和第二个示范记录

Declare @Formulas table (ID int,Calculation varchar(max))
Insert Into @Formulas values
(1,'([310165])/([7248]+[7249])'),
(2,'([999999])/([7248]+[7249])')

Declare @Values table (ValueID int,Value money)
Insert Into @Values values
(7248    , 18521),
(7249    , 3835),
(310165  , 68546.24),
(999999  , 75000)

Declare @SQL varchar(max)=''
Select  @SQL = @SQL+concat(',(',ID,',',Calculation,')') From @Formulas --Where ID=2
Select  @SQL = Replace(@SQL,'['+cast(ValueID as varchar(25))+']',Value) From @Values
Select  @SQL = 'Select * From ('+Stuff(@SQL,1,1,'values')+') N(ID,Value)'
Exec(@SQL)

返回

ID  Value
1   3.06612274109
2   3.35480407944