在storedprocedure中使用CASE报"Incorrect syntax near the keyword CASE"如何解决
错误原因
SQL 中的 CASE 是表达式,只能用来返回值,不属于流程控制语句,不能直接作为分支结构包裹 SET 语句,这是触发语法错误的核心原因。
修正方案
你可以根据实际场景二选一:
方案1:用 IF ELSE 流程控制分支实现
如果每个分支除了给 @Query 赋值外还有其他逻辑操作,选这个方案:
DECLARE @Query AS VARCHAR(max); -- 此处保留你原本@Type变量的赋值逻辑 IF @Type = 1 BEGIN SET @Query = '' -- 填入Type=1时对应的查询语句 END ELSE IF @Type = 2 BEGIN SET @Query = '' -- 填入Type=2时对应的查询语句 END ELSE IF @Type = 3 BEGIN SET @Query = '' -- 填入Type=3时对应的查询语句 END ELSE BEGIN SET @Query = '' -- 填入默认场景对应的查询语句 END
方案2:把 CASE 作为赋值表达式使用
如果只是单纯根据@Type的值给@Query赋值,这个方案代码更简洁:
DECLARE @Query AS VARCHAR(max); -- 此处保留你原本@Type变量的赋值逻辑 SET @Query = CASE WHEN @Type = 1 THEN '' -- 填入Type=1时对应的查询语句 WHEN @Type = 2 THEN '' -- 填入Type=2时对应的查询语句 WHEN @Type = 3 THEN '' -- 填入Type=3时对应的查询语句 ELSE '' -- 填入默认场景对应的查询语句 END
内容的提问来源于stack exchange,提问作者Mark Cosa
相关产品推荐
相关产品推荐

