SQL Server – как выполнить вычисление на основе динамической формулы

У меня есть случай, когда мне нужно выполнить динамический расчет на основе определенной записи в столбце.

Таблица выглядит примерно так:

DECLARE Temp TABLE ( Id INT, Name NVARCHAR(255), Const1 DECIMAL(18,10), Const2 DECIMAL(18,10), Const3 DECIMAL(18,10), Const4 DECIMAL(18,10) ); 

Я хочу добавить в поле под названием «Расчет». Пользователь должен указать в этом поле, как должны применяться константы (т.е. «Const1 * Const2 + (Const3 – Const4)»).

У меня есть функция, которая имеет формулу, жестко закодированную, но я хочу иметь возможность динамически сопоставлять столбцы таблицы в поле «Расчет». Это возможно? Если я получаю запись в таблице, например:

 ID| Name | Const1 | Const2 | Const3 | Const4 | Calculation 1 | Calculation1 | 5 | 3 | 2 | 9 | Const1 * Const2 + (Const3 - Const4) 

Затем в моей функции я могу динамически выполнить вычисление и вернуть это как результат? Правильно ли я подхожу к этой проблеме?

Заранее спасибо!

Вам нужно будет использовать динамический SQL с sp_executesql или EXEC . Я не помню, могут ли они использоваться в UDF или нет, и есть некоторые проблемы, о которых нужно знать, например SQL Injection и возможные проблемы с производительностью. У меня нет времени проверить, работает ли это в UDT, но вам нужно что-то вроде:

 DECLARE @sql VARCHAR(MAX) SELECT @sql = 'SELECT ' + REPLACE(REPLACE(Calculation, 'Const1', Const1), 'Const2', Const2)... + ' AS result' FROM My_Table WHERE ID = 1 EXEC(@sql) 
Давайте будем гением компьютера.