2015-08-11 3 views
0

У меня есть следующий запрос:Ошибка преобразования при использовании оператора выбора - Sql Server

select *, 
case when prod='CPU' and quan>1000 then 1000 
    when prod='MOUSE' and quan>1024 then 1024 
    when prod='MONITOR' and quan<2 then 2 else quan end as quan 
from products_test; 

я получаю сообщение об ошибке: Конверсия удалось при преобразовании значения VARCHAR «CPU» для типа данных Int.

+6

Хорошо, 'prod' является' int'. Почему вы сравниваете его со строковым значением «CPU»? –

+1

опубликуйте свои данные product_test – tharif

+0

У него, вероятно, есть данные, что в таблице, где prod является int и не понимает. –

ответ

1

UPDATE: В свете следующего комментария от автора вопроса

I changed the code code as described by you, but it's still throwing an error. "Conversion failed when converting the varchar value '23787.1' to data type int"

Похоже quan в varchar типа, а не numeric, а также его с изменением ошибок было подтверждено, что prod является определяется как integer.

select *, 
case when CAST(prod AS VARCHAR(MAX))='CPU' and CAST(quan as DECIMAL(10,4))>1000 then 1000 
    when CAST(prod AS VARCHAR(MAX))='MOUSE' and CAST(quan as DECIMAL(10,4))>1024 then 1024 
    when CAST(prod AS VARCHAR(MAX))='MONITOR' and CAST(quan as DECIMAL(10,4))<2 then 2 else CAST(quan as DECIMAL(10,4)) end as quan 
from products_test; 

Old answer: Please try this modified query :

select *, 
case when CAST(prod AS VARCHAR(MAX))='CPU' and quan>1000 then 1000 
    when CAST(prod AS VARCHAR(MAX))='MOUSE' and quan>1024 then 1024 
    when CAST(prod AS VARCHAR(MAX))='MONITOR' and quan<2 then 2 else quan end as quan 
from products_test; 

if this works successfully, the Prod is in fact defined as int and you can never get the then (true case) values in CASE statements.

Вы, вероятно, нужно сравнить коды или внешние ключи из главной таблицы, которая имеет значение 'CPU', 'MOUSE' and 'MONITOR' с продом.

+1

@Abhi. , , Я понимаю, что вы приняли этот ответ, так что вы, должно быть, обнаружили, что так или иначе это работает. Однако с точки зрения SQL Server он будет генерировать ту же ошибку преобразования для недопустимого форматированного числа, независимо от того, является ли преобразование неявным или явным. –

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