我有一个表,其中有一列名为"Calc“varchar(50)。此列包含数学计算,如1+1、9*9、10/2、10-2等。是否可以在更新查询中应用该列的计算,并将结果输出到"Results“列的同一个表中的varchar(50)。
发布于 2020-10-10 00:17:43
到目前为止,SQL Server没有EVAL()函数,也不支持宏替换。
但是,这可以通过动态SQL来完成
示例
Create table #YourTable (id int,[Calc] varchar(150),Results varchar(150))
Insert Into #YourTable Values
(1,'1+1',null)
,(2,'9*9',null)
,(3,'10/2',null)
,(4,'10-2',null)
,(5,'datediff(DAY,''2018-01-01'',getdate())',null) -- Added Just for Fun
Declare @SQL varchar(max) = Stuff((Select ',' + concat('(',ID,',',[Calc],')')
From #YourTable A
For XML Path (''))
,1,1,'')
Exec('Update A set Results = B.Value
From #YourTable A
Join ( Select * from (values ' + @SQL + ')A([ID],[Value]) ) B
on A.ID = B.ID
')
Select *
From #YourTable
更新表
id Calc Results
1 1+1 2
2 9*9 81
3 10/2 5
4 10-2 8
5 datediff(DAY,'2018-01-01',getdate()) 1012
https://stackoverflow.com/questions/64283490
复制相似问题