SQL Server SQL CASE如何更正赋值?

gijlo24d  于 2022-11-21  发布在  其他
关注(0)|答案(2)|浏览(138)

首先,我想说,我已经花了应有的时间和勤奋对我的一部分,通过观看视频,使用其他来源,并阅读其他职位和答案的SOF之前,问这个问题,并已无法找到一个解决方案。
我遇到的问题是,在一个特定的情况下,传入了一个特定的类型,这将需要使用LIKE,因为该特定类型本身将不匹配任何内容,因为三个类型使用一个类型,在这种情况下说'painting'。数据库有'painting small'和'painting large'。
编码

// I tried this
CASE WHEN type = 'painting' THEN inventory.type LIKE '%'+type+'%' ELSE inventory.type = type END

我不断遇到“在需要条件的上下文中指定的非布尔类型的表达式。我尝试过IF ELSE的一些其他变体,但是,我遇到了同样的问题。其他人可能会更好地表达这个问题。
我主要是想被指向正确的方向,并得到关于我做错了什么的澄清。
谢谢你

kmb7vmvb

kmb7vmvb1#

你的查询有几个问题。我将解决一个不太明显的问题,而不是CASE表达式本身,你缺少前缀。以下面的子句为例:

inventory.type LIKE '%'+type+'%'

这可能是由于列名不明确而导致的错误,也可能是解析为inventory.type LIKE '%'+inventory.type+'%'。显然,后者 * 总是 * 为真,除非列type的值为NULL总是为列名添加前缀,特别是当查询包含2个以上的表时。
至于实际问题,这大概是WHERE的一部分,因此使用ORAND逻辑:

WHERE (({Other Table Prefix}.[type] = 'painting' AND inventory.[type] LIKE '%' + {Other Table Prefix}.[Type] + '%')
   OR  ({Other Table Prefix}.[type] != 'painting' AND inventory.[type] = {Other Table Prefix}.[Type]))

显然,您需要用正确的前缀适当地替换{Other Table Prefix}

ldfqzlk8

ldfqzlk82#

问题似乎出在

LIKE '%'+type+'%'

其中LIKE可能返回布尔值。

相关问题