Before giving new details, try simplifying this script too:
declare @mytable table( PlacementID int, EarnCode varchar(max), Formula varchar(max))
insert @mytable values
( 1111, 'HOL', '(50 x 2) + 10 + 5' ),
( 1111, 'REG', '50 x 2 ' ),
( 2222, 'HOL', '100 x 1.5 ' )
declare c cursor for select PlacementID, EarnCode, Formula from @mytable
declare @id int
declare @ec varchar(max)
declare @f varchar(max)
declare @result table( PlacementID int, EarnCode varchar(max), RESULTS float)
open c
while 0 = 0
begin
fetch next from c into @id, @ec, @f
if @@FETCH_STATUS <> 0 break
declare @s nvarchar(max)
set @s = concat('select @r = ', replace(@f, 'x', '*'))
declare @r float = null
exec sp_executesql @s, N'@r float output', @r output
insert @result select @id, @ec, @r
end
close c deallocate c
select * from @result