使用Switch命令能否修复T-SQL代码中CASE语句的解析报错问题
报错原因
报错由两处CASE语法错误导致,另外你提到的Switch无法识别是因为该函数不属于T-SQL原生语法,仅支持在Access、SSRS表达式等场景使用,T-SQL中分支判断统一使用CASE表达式即可。
两处具体语法错误:
- 第一个CASE块的首行
When ([gdklinkID] = 1 then [stuListName]多了一个未闭合的左括号(,直接导致解析器无法识别后续的THEN关键字 - 第一个CASE块的
When [gdklinkid] = 12, then 'Pass Thru'行,在判断条件后多写了一个多余的逗号,,触发逗号无法识别的报错
修正后代码
修正上述两处语法错误后,代码可正常解析运行:
Case When [gdklinkID] = 1 then [stuListName] When [gdklinkID] = 2 then [tblmissionsite].[msnname] When [gdklinkID] = 4 then [spname] When [gdklinkid] = 6 then 'Best Use' When [gdklinkid] = 7 then [gdaname] When [gdklinkid] = 12 then 'Pass Thru' Else 'oops' End AS CatDetail, Case When [gdklinkID] = 1 then 'Contrib-StuFam' When [gdklinkid] < 5 then 'Contributions-Designated' When [gdklinkid] = 5 then 'Grants' When [gdklinkid] = 6 then 'Contributions-Undesignated' When [gdklinkid] = 7 and [gdaid] = 84 then 'Dividends' When [gdklinkid] = 7 and [gdaid] = 146 then 'Chk' When [gdklinkid] = 7 and [gdaid] = 147 then 'Svgs' When [gdklinkid] = 7 then 'Contributions-Undesignated' When [gdklinkid] = 12 then 'Pass Thru' Else 'oops' End AS CatDetail2
注意事项
- T-SQL中
CASE表达式的每个分支必须严格遵循WHEN 判断条件 THEN 返回值的结构,不能出现未闭合的括号、多余标点 - 所有分支的返回值最好保持数据类型一致,避免隐式类型转换导致的异常
内容的提问来源于stack exchange,提问作者Wrencher57
相关产品推荐
相关产品推荐

