您好,我为此进行了很多搜索,但找不到合适的解决方案。
让我们想象一个有以下查询
Select width, height, depth, formula from myTable
我想在公式中进行替换以进行转换 w变成宽度值 h转换为高度值 d变成深度值
,然后我想将这个结果字符串转换为: 将((1 + 2)* 3)转换为表达式,以便对其进行计算。
我使用
遇到了一些答案exec ('select '+@expression)
但这不适用于每一行。我只是不能在选择内使用exec。 像这样
select 1 as col1, exec ('select '+@expression) as col2
甚至将字符串转换为表达式 像
Cast('1+1' as expression)
我需要的最终结果很简单。跟随波纹管。
+-------+--------+-------+---------+--------+
| width | height | depth | formula | result |
+-------+--------+-------+---------+--------+
| 1 | 2 | 3 | (w+h)*d | 12 |
+-------+--------+-------+---------+--------+
| 2 | 1 | 3 | d+d*h | 6 |
+-------+--------+-------+---------+--------+
| 3 | 3 | 1 | (d/4)*d | 0.25 |
+-------+--------+-------+---------+--------+
答案 0 :(得分:0)
您无法在简单的查询中执行此操作,因为公式在每一行上都会更改。获得结果的一种方法是遍历表并分别执行每一行。像这样:
声明@sql nvarchar(max);
声明@id int = 0; 声明@maxid int;
从mytable中选择@maxid = max(id);
while @id < @maxid
begin
select @sql = concat('select ', width, ' as width, ', height, ' as height, ', depth, ' as depth, ', formula, ' as value, ''', formula + ''' as formula',
' from (select ', width, ' as w, ', height, ' as h, ', depth, 'as d) x')
from mytable t
order by id
offset @id rows fetch next 1 row only;
exec sp_executesql @sql;
set @id = @id + 1;
end;
Here是db <>小提琴。