Тест DDL
with cte as (
select '0001' ID,1 InputValue,'Qty*2;Qty*5' Formulas union all
select '0002' ID,2 InputValue,'Qty+4;Qty/5' Formulas
)
select * into T from cte
--Query Data
ID ,InputValue ,Formulas
0001 ,1 ,Qty*2;Qty*5
0002 ,2 ,Qty+4;Qty/5
Ожидаемое
вызовите somefunction или sqlquery получите ниже результата
ID ,InputValue ,Formulas ,Qty1 ,Qty2
0001 ,1 ,Qty*2;Qty*5 ,2 ,5
0002 ,2 ,Qty+4;Qty/5 ,6 ,0.4
Logic
Формула сокращена на ;
Входное значение использует первую формулу для вычисления поля qty1
Входное значение использует вторую формулу для вычисления поля qty2
Мой тест
В настоящее время мое решение заключается в использовании программирования на C # для решения проблемы
using (var cn = Connection)
{
cn.Open();
var datas = cn.Query(@"
with cte as (
select '0001' ID,1 InputValue,'Qty*2;Qty*5' Formulas union all
select '0002' ID,2 InputValue,'Qty+4;Qty/5' Formulas
)
select * into #T from cte;
select * from #T;
");
var result = datas.Select(s => {
var arr = (s.Formulas as string).Split(';');
var qtyFor = arr[0].Replace("Qty", Convert.ToString(s.InputValue));
var qty1For = arr[1].Replace("Qty", Convert.ToString(s.InputValue));
var qty = new DataTable().Compute(qtyFor, string.Empty);
var qty1 = new DataTable().Compute(qty1For, string.Empty);
return new {s.ID,s.InputValue,s.Formulas,Qty=qty,Qty1=qty1};
});
Console.WriteLine(result);
/*
Result:
ID ,InputValue ,Formulas ,Qty1 ,Qty2
0001 ,1 ,Qty*2;Qty*5 ,2 ,5
0002 ,2 ,Qty+4;Qty/5 ,6 ,0.4
*/
}
Я знаю, что эта структура таблицы странная, но это старая система без исходного кода, поэтому я не могу исправить структуру таблицы