EXECUTE sp_executesql не работает в SQL Server - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь реализовать механизм, который будет выполнять вычисления на основе динамически определенных алгоритмов. Я делаю это так:

  1. Построить строку, содержащую определение всех переменных и их значений,
  2. Выборка (из таблицы) формулы расчета,
  3. Invoke sp_executesql.

Вот содержимое строки, переданной в качестве вычисления (содержимое переменной @_l_Execute_Formula):

DECLARE @_1 FLOAT = 678;
DECLARE @_2 FLOAT = NULL;
DECLARE @_3 FLOAT = NULL;
SET @_l_Result = @_1 + @_2 + @_3

и вызов:

EXECUTE sp_executesql   @_l_Execute_Formula            , 
                      N'@_l_Result FLOAT OUTPUT'       , 
                        @_l_Result = @_l_Result OUTPUT   ;

Я не получаю сообщение об ошибке, но @_l_Result равно NULL.

Что я делаю не так?

1 Ответ

0 голосов
/ 10 мая 2018

Сумма значений с плавающей запятой с NULL return NULL. Возможно, вы захотите экранировать NULL значения.

DECLARE @_l_Execute_Formula NVARCHAR(MAX) = '

DECLARE @_1 FLOAT = 678;
DECLARE @_2 FLOAT = NULL;
DECLARE @_3 FLOAT = NULL;
SET @_l_Result = ISNULL(@_1, 0) + ISNULL(@_2, 0) + ISNULL(@_3, 0)'

DECLARE @_l_Result FLOAT

EXECUTE sp_executesql   @_l_Execute_Formula            , 
                      N'@_l_Result FLOAT OUTPUT'       , 
                        @_l_Result = @_l_Result OUTPUT;


SELECT @_l_Result  -- Result 678
...