Как динамически вычислить столбец, содержащий формулу в SQL Server, возвращаемое значение - PullRequest
0 голосов
/ 03 июля 2019

Я искал это, но я не знаю, как запросить эту конкретную информацию.

Давайте представим, что у меня есть что-то подобное в моей таблице sql.

Columns:
width : 10
height: 15
Depth: 6

И у меня есть такой столбец формулы

formula: (W*2)+H+D+3

, где я заменяю W на ширину, H на высоту и D на глубину. используя sql Replace, я могу сделать это и преобразовать конечный результат как

(10*2)+15+6+3

Проблема в том, что в результате мне нужно выполнить вычисления в столбце.

Я пробовал это прямо в SQL

select 1 as width , 
2 as height , 
3 as depth , 
'H*2+W' as formula,
replace(Replace(REPLACE('H*2+W','W',1),'H',2),'D',3) as result

Мне нужно иметь возможность сделать это непосредственно в запросе и вычислить результат каждой строки с его конкретным значением.

Я пытался делать Execs внутри Select, но безуспешно. это будет выполнять 1000 запросов, если мой первоначальный запрос имеет 1000 строк ...

Как я могу сделать это как можно лучше?

1 Ответ

0 голосов
/ 03 июля 2019

Вы не можете легко сделать то, что вы хотите.SQL Server не имеет удобного механизма синтаксического анализа для создания кода из строк.Вы можете использовать динамический SQL и курсор, но это громоздко.

Однако вы можете хранить свои формулы, используя коэффициенты:

formula         w_coeff    h_coeff    d_coeff    constant
(W*2)+H+D+3        2          1           1          3
'H*2+W'            1          2           0          0

Тогда вы можете сделать:

select v.*, f.*,
       (f.w_coeff * v.w + f.h_coeff * v.h + f.d_coeff * v.d + f.constant)
from (values (1, 2, 3)) v(w, h, d) cross join
     formulas f;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...