2016-12-01 89 views
1

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

实例公式是公式表中的列列名为计算公式中

(310165)/(7248+7249) 

这些数字代表的值表相应VALUEID的

ValueID | Value 
7248 | 18521 
7249 | 3835 
310165 | 68546.24 

我需要找到与SQL的方式通过与值表中的ValueID进行匹配,将值注入公式表中的公式。

我看过替换和东西,并为XML路径,我似乎无法找到一种方法来完成这件事。做完这些之后,我需要评估用实际值生成的表达式以返回一个int值。任何帮助是极大的赞赏。

+0

EXEC '的SQL代码';或EXEC(@SqlVariableName) – SnakeFoot

+1

你正在使用哪个dbms? (ANSI SQL没有这样的功能。)也许可以使用动态SQL。 – jarlh

+0

SQL Server 2012是表所在的位置。 – Camp

回答

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 
+0

计算公式中的值实际上是“标记化”的真实输出是([310165])/([7248] + [7249])我刚刚忽略了[]中的读取能力,对此抱歉。这会对你提供的内容有所影响吗?感谢您的帮助John – Camp

+0

@Camp查看更新后的答案。这将会一次性处理所有内容 –

+0

感谢您的帮助,这完全是我所需要的。 – Camp