我有一个表格,其中所有条目都采用算术公式(即1+2+3
等)的形式。
在此表中,所有列的类型均为varchar
。该表有很多这样的列。
我想计算公式并将值插入另一个。关于如何实现这一目标的任何建议?
我有一个表格,其中所有条目都采用算术公式(即1+2+3
等)的形式。
在此表中,所有列的类型均为varchar
。该表有很多这样的列。
我想计算公式并将值插入另一个。关于如何实现这一目标的任何建议?
你可以试试这个。我希望这可以帮助你。它从 t1 获取表达式并将结果放入 t2。您不想将 t1 设为实际表,因为它会从表中删除,因此您可以将实际表值复制到临时表中
declare @t as table(val varchar(20))
declare @t2 as table(val varchar(20))
insert into @t values
('1+3'),
('2*3'),
('9+3*2')
declare @exp varchar(20)
while(exists(select 1 from @t))
begin
select top(1) @exp = val from @t
insert into @t2
exec ('select '+@exp)
delete top (1) from @t
end
select * from @t2
结果
val
------
4
6
15
您可以查看这些链接类似的问题here和Convert string with expression to decimal
您可以声明两个表变量:
@tabformula
其中将存储公式@tabresult
将在其中存储结果有一个 ID 列将用于连接这两个表。
用所需的公式填充第一个表后,声明一个游标,然后执行formula
并将结果存储到@tabresult
表中。
declare @tabformula as table (id int identity(1,1), formula
varchar(200)) declare @tabresult as table (id int, result int)
insert into @tabformula(formula) values('1+4+6+7') ;
insert into @tabformula(formula) values('10+4+60+7');
insert into @tabformula(formula) values('1+4+6+70') ;
insert into @tabformula(formula) values('1+44+65+7');
declare c cursor for select ID,formula from @tabformula declare @id as
int declare @formula as varchar(200)
open c fetch c into @id,@formula while @@fetch_status=0 begin print
@formula insert into @tabresult (id,result) exec( 'select '+ @id +
','+@formula ) fetch c into @id,@formula end close c deallocate c
select T1.id,t1.formula,T2.result from @tabformula t1 inner join
@tabresult t2 on t1.id=t2.id