Что было бы лучшим решением, если бы у меня была такая таблица:
Value Formular
12 'SELECT Value+5 AS result'
15 'SELECT 4/Value+3 AS result'
16 'SELECT 5 AS result'
Итак, в Formular-Column есть SQL-Statemants (как nvarchar (max)).Теперь мне нужно вычислить для каждой строки результат.
Текущий подход - это WHILE с курсором и обрабатывать каждую строку для себя.
Нам нужно использовать временную таблицу для каждой строки, потому чтомы не смогли найти лучшего решения, как получить результат от исполнителя.Например:
declare @Value decimal(18,4);
create table #t(val decimal(18,4))
insert into #t exec(@formular)
select val from #t
У нас есть> 100'000 таких строк, и это занимает около 2 часов вычислений.(Формулы и значения конечно сложнее, чем в приведенном примере)
Есть ли возможность получить что-то вроде
SELECT Value, exec(Formular) as result FROM calctable
Спасибо
РЕДАКТИРОВАТЬ:
Хорошо, Софар, я нашел, по крайней мере, обходной путь для EXEC () и соблазнительный:
declare @formular as nvarchar(max)
declare @r_value decimal(18,4);
set @formular='....'
set @formular='select @r_value = Value FROM (' + @formular + ')dt'
EXEC sp_executesql @formular, N'@r_value DECIMAL(18,4) OUTPUT', @r_value OUTPUT
UPDATE Result_Values SET [Value]=@r_value WHERE ID=@calc_id;