我有一个表,其中包含用户定义的计算公式和另一个保存值的表。我需要将值注入计算公式,以便能够评估公式并返回结果。
“公式”表中名为“计算公式”的列行中的示例公式
(310165)/(7248+7249)
这些数字代表值表
中对应的ValueIDValueID | Value
7248 | 18521
7249 | 3835
310165 | 68546.24
我需要找到一种使用SQL的方法,通过匹配Values表中的ValueID,将Value注入到Formulas表的公式中。
我看过替换和东西以及xml路径,我似乎无法找到一种方法来完成这项工作。完成此操作后,我需要评估使用实际值生成的表达式以返回int值。任何帮助是极大的赞赏。
答案 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