SQL WHERE子句使用CASE语句触发Msg 102语法错误如何解决
错误原因
你的代码存在两个语法问题:
- SQL中
CASE表达式的THEN/ELSE分支仅支持返回具体值,不支持直接返回[字段] = 1这类布尔判断表达式,这是触发=附近语法错误的核心原因 - 你写的
CASE语句没有添加必需的END关键字完成闭合
修复方案
方案1:调整CASE语句写法
只让CASE返回对应平台字段的值,将比较逻辑放到表达式外部:
@Platform AS INT, @Type AS INT AS BEGIN SELECT [Product_Name], [Product_Description], [Product_Release], [Product_Image], [Windows_PC], [Linux], [Mac], [Android], [Fire_TV], [Amazon_App_Store], [Google_Play_Store], [X_Box], [Switch], [Playstation], [Link_Game_Play], [Link_Twitter], [Link_Download], [Link_Web], [Available_Now], [New_Release], [Coming_Soon], [Open_Beta] FROM [White_Box_Gaming].[dbo].[WBG_Product_Profile] WHERE CASE WHEN @Platform = 1 THEN [Windows_PC] WHEN @Platform = 2 THEN [Mac] WHEN @Platform = 3 THEN [Linux] WHEN @Platform = 4 THEN [Android] ELSE [Windows_PC] END = 1 END
方案2:改用OR组合条件(更推荐)
这种写法执行效率更高,逻辑也更直观:
WHERE (@Platform = 1 AND [Windows_PC] = 1) OR (@Platform = 2 AND [Mac] = 1) OR (@Platform = 3 AND [Linux] = 1) OR (@Platform = 4 AND [Android] = 1) OR (@Platform NOT IN (1,2,3,4) AND [Windows_PC] = 1)
内容的提问来源于stack exchange,提问作者mholmes
相关产品推荐
相关产品推荐

