Ошибка преобразования varchar в числовой в динамическом запросе SQL - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть требование, чтобы входной параметр, который передается в SP, имел тип numeric (18,6).И этот параметр передается динамическому SQL-запросу (тип varchar), и результат будет сохранен во временной таблице.Во временной таблице я определил вышеупомянутый тип столбца только как числовой.но при выполнении SP я получаю сообщение об «ошибке преобразования типа данных varchar в числовой».Есть ли ограничения в использовании динамического Sql?Кто-то Пожалуйста, помогите мне в этом.

пример запроса:

-------------
Input Parameter: @DataItem numeric(18,6) = ABC054356  (column name) 

CREATE TABLE #Temp1(RowNum int, 
                    CompanyID int, 
                    ABCColumn numeric(18,2), 
                    FiscalYear varchar(100))

DECLARE @QUERY varchar(max)

SET @QUERY = N'select row_number() over (partition by fy.keyinstn order by fy.fiscalyear desc) as RowNum, fy.Keyinstn, '
                        + Convert(@DataItem as numeric(18,2)))+
                        ', period.fiscalyear from ABCTable
................
................


INSERT into #Mnemonic
EXEC(@query)

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Вы явно передаете имя столбца в таблице, которое затем хотите преобразовать.

Если это так, то это будет выглядеть как

declare @sql nvarchar(max);

set @sql = N'
select row_number() over (partition by fy.keyinstn order by fy.fiscalyear desc) as RowNum,
       fy.Keyinstn,
       convert(decimal(18, 2), [DataItem]) as [DataItem], 
       period.fiscalyear
from ABCTable
. . .
';

set @sql = replace(@sql, '[DataItem]', @DataItem);

insert into #Mnemonic
    exec(@query);
0 голосов
/ 10 сентября 2018

Вы должны преобразовать числовое значение в строку перед объединением

SET @QUERY = N'select row_number() over (partition by fy.keyinstn order by fy.fiscalyear desc) as RowNum, fy.Keyinstn, '
                        + CONVERT(VARCHAR(20), @DataItem)+
                        ', period.fiscalyear from ABCTable ....... '
...