2016-12-01 36 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