如何在SQL中进行EVAL表达式

时间:2018-07-30 06:55:46

标签: sql sql-server

我有一个表,该表的列用逗号隔开。我想将每个记录的所有数字加在一起。使用 spexecuteSQL ,我已经了解到了这一点,但是它仍然没有评估该字段。我该怎么办?

例如字段是'4,5,5'转置为4 + 5 + 5,但要求值并得到---> 14

declare @com as nvarchar(100)
set @com= 'select replace(class_historyTY,'','',''+'') from #aety1'

exec sp_executesql @com

2 个答案:

答案 0 :(得分:2)

如果您有SQL Server 2016,则应该可以进行以下操作:

select name, sum(cast(t.value as int)) from
(select name, cs.Value
from details
cross apply STRING_SPLIT (name, ',') cs) t
group by name

我的桌子的样子:

details
---------------
name
--------------
1,2,3,4
---------------
10,20,30

结果:

 name | 
 1,2,3,4 | 10
 10,20,30 | 60

答案 1 :(得分:1)

由于约瑟夫(Josef)提出的交叉申请是正确的做法,因此您想使用sp_executesql解决方案:

Declare @s nvarchar(max) = 'select ' 
                + (select replace(class_historyTY,',','+')  from #aety1) 
exec sp_executesql  @s

这里的想法是首先使求和字符串成为4+5+5,然后将其包装在select语句中,然后将表达式select 4+5+5传递给sp_executesql