我正在研究搜索SQL的部分,但我收到错误
我做的是...... 首先,我有一个显示类型表
display_id |
1 | LED
2 | LCD
3 | PDP
其次,我进行选择查询。
SELECT * FROM Product
WHERE
display_id =
CASE @display_type
WHEN 1 then 'LED'
WHEN 2 then 'LCD'
WHEN 3 then 'PDP'
END
如果显示ID为1,那么我想显示查询结果的'LED'。
然而,我收到错误
Msg 245, Level 16, State 1, Procedure search_item, Line 18
Conversion failed when converting the varchar value 'LED' to data type int.
我试图使用转换但它不起作用。
有人知道这个问题的解决方案吗?
答案 0 :(得分:2)
您可以将Case Statement
移至Select clause
,将@display_type转换为字符串以便显示。
SELECT
CASE WHEN convert(int, @display_type) = 1 then 'LED'
WHEN convert(int, @display_type) = 2 then 'LCD'
WHEN convert(int, @display_type) = 3 then 'PDP'
END as DisplayType,
*
FROM
Product
如果你只是一个具有特定显示类型的产品列表......
SELECT
*
FROM
products as P
inner join MyDisplayTable as DISP on DISP .display_id = P.display_id
WHERE
DISP.Display_Type = @display_type
Display_Type
答案 1 :(得分:2)
您正在WHERE子句中混合数据类型。 display_id
似乎是整数,您将其与'LED','LCD'或'PDP进行比较,具体取决于CASE声明的结果。
答案 2 :(得分:1)
如果你有一张可以加入的桌子,你为什么要使用Case?
SELECT Product.*, DisplayType.Type
FROM Product INNER JOIN DisplayType ON Product.display_id=DisplayType.display_id
您没有指定包含“LED”,“LCD”,“PDP”的列的名称,因此如果它不同,则您必须更改该部分。
答案 3 :(得分:0)
SELECT
*,
CASE @display_type
WHEN 1 then 'LED'
WHEN 2 then 'LCD'
WHEN 3 then 'PDP'
END as myType
FROM
Product
WHERE
display_id = @display_type