2010-12-13 3 views
0

У меня проблема с моей операцией case. Вот выдержка из моей таблицы структуры:Ошибка преобразования varchar в числовой

total = decimal(9,2) 
selfrec = decimal(9,2) 

И вот случае утверждения, что дает мне вопросы:

CASE 
    WHEN Invoices.selfrec IS NOT NULL 
    THEN 'Self Reconcilation: ' + Invoices.total + ' - ' + Invoices.selfrec + ' = ' + Invoices.total - Invoices.selfrec ELSE Invoices.total 
END AS 'total' 

Когда selfrec не равно нулю, то, кажется, пытаются преобразовывать такие строки, как «Я Согласование: «числовое и, очевидно, не выполняется. Почему он это делает?

Спасибо.

+1

122 вопроса и только 2 голоса. Шутки в сторону? –

ответ

3

Просто запустите эту строку:

select 'Self Reconcilation: ' + Invoices.total + ' - ' + Invoices.selfrec + ' = ' + Invoices.total - Invoices.selfrec 

Вы получите ошибку. Вы пытаетесь сделать неявное преобразование числового значения в varchar.

Попробуйте следующее. Varchar (12) должно быть достаточно для десятичной (9,2)

select 'Self Reconcilation: ' + cast(Invoices.total as varchar(12)) + ' - ' + cast(Invoices.selfrec as varchar(12)) + ' = ' + cast(Invoices.total - Invoices.selfrec as varchar(12)) 

Давать вам (Девять + два, и один для ''):

CASE 
    WHEN Invoices.selfrec IS NOT NULL 
     THEN 'Self Reconcilation: ' + cast(Invoices.total as varchar(12)) + ' - ' + cast(Invoices.selfrec as varchar(12)) + ' = ' + cast(Invoices.total - Invoices.selfrec as varchar(12)) 
    ELSE Invoices.total 
END AS 'total' 

Кроме того, почему бы не проверить для Сначала NULL. Предложение else эффективно говорит «если не не null». :-)

+0

+1: Просто увидел это, и ты избил меня. –

+0

Удивительный, отлично работает. Благодаря! – Chris

+0

Не беспокойтесь. Если бы это было полезно, возможно, вы могли бы проголосовать. –

4

Вы оставляете его для вывода типа на основе строки и числа. Дайте ему подсказку:

ELSE CONVERT(varchar(30), Invoices.total) 

то он имеет выбор VARCHAR и VARCHAR, так что знает это VARCHAR с самого начала, и не может делать какие-либо ошибки.

+0

Спасибо, приятель, все еще проблема: – Chris

3

На самом деле это попытка конвертировать ' = ' и так далее в числовое число, чтобы перенести числовое дополнение. Сначала вам нужно указать CAST числовое значение varchar.

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