使用SQL计算/评估用户定义的公式
问题描述:
我有一个保存用户定义的计算公式的表和保存这些值的另一个表。我需要将值注入计算公式中,以便能够评估公式并返回结果。使用SQL计算/评估用户定义的公式
实例公式是公式表中的列列名为计算公式中
(310165)/(7248+7249)
这些数字代表的值表相应VALUEID的
ValueID | Value
7248 | 18521
7249 | 3835
310165 | 68546.24
我需要找到与SQL的方式通过与值表中的ValueID进行匹配,将值注入公式表中的公式。
我看过替换和东西,并为XML路径,我似乎无法找到一种方法来完成这件事。做完这些之后,我需要评估用实际值生成的表达式以返回一个int值。任何帮助是极大的赞赏。
答
此更新将动态处理整个表格。在@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
EXEC '的SQL代码';或EXEC(@SqlVariableName) – SnakeFoot
你正在使用哪个dbms? (ANSI SQL没有这样的功能。)也许可以使用动态SQL。 – jarlh
SQL Server 2012是表所在的位置。 – Camp