2013-05-13 3 views
2

Пытаясь выяснить, почему я получаю эту ошибку, что происходит при создании строки в EXECОшибка арифметического переполнения преобразования NVARCHAR к типу данных числового при создании строки

SET @SQLINSERTSTRINGFINAL = @SQLINSERTSTRING + @Suggested_Qty+''','''+ 
    @Required_Qty+''','''+ 
    @System_Cost+''','''+ 
    @Revised_Cost 

Эти 4 переменные заполняются из

convert(numeric(7,2),ltrim(rtrim(floor((case when r.calc_qty > 99999 then 99999 else r.calc_qty end)/(case when s.PLBCF_1 is null or s.PLBCF_1 =0 then 1 else s.PLBCF_1 end))))), 
    convert(numeric(7,2),ltrim(rtrim(floor((case when r.po_number <> 'NONE' then r.calc_qty else case when r.adj_qty > 99999 then 99999 else r.adj_qty end end)/(case when s.PLBCF_1 is null or s.PLBCF_1 = 0 then 1 else s.PLBCF_1 end))))), 
    convert(numeric(9,4),ltrim(rtrim(case when s.std_cost is null then r.std_cost else s.std_cost end))), 
    convert(numeric(9,4),ltrim(rtrim(r.std_cost))) 

Я проверил каждую используемую таблицу, и они соответствуют типу столбца. Только нечисловой там есть r.po_number, который может быть значением «NONE»

+0

Если я удалю конкатенацию строк, я не получу ошибок –

+0

Вы проверили, что все ваши номера находятся в правильном количестве цифр для этого поля. Например, если у вас числовое число 7,2 больше их цифр. Обычно «Арифметическое переполнение» будет связано с этим в моем опыте. – logixologist

ответ

1

Вы должны преобразовать каждый числовой в строку, когда вы настраиваете окончательное значение строки, как это:

SET @SQLINSERTSTRINGFINAL = @SQLINSERTSTRING + convert(nvarchar(max), @Suggested_Qty)+''','''+ 
    convert(nvarchar(max), @Required_Qty)+''','''+ 
    convert(nvarchar(max), @System_Cost)+''','''+ 
    convert(nvarchar(max), @Revised_Cost) 

It не будет автоакцировать вас

+0

Спасибо, я не знаю, почему я этого не видел, поскольку стараюсь как можно больше исследовать, прежде чем задавать вопросы. Как только это позволит мне, я собираюсь принять этот ответ. –

Смежные вопросы

 Смежные вопросы