You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

存储过程GetTotalComp报错Msg 156:THEN关键字附近语法错误求助

解决SQL Server中Msg 156, Level 15, State 1语法错误(THEN关键字附近)

这个Msg 156, Level 15, State 1错误是SQL Server里非常常见的语法问题,从提示来看,你的存储过程GetTotalComp第19行的THEN关键字附近存在语法违规,大概率是CASE表达式的结构出了问题。下面我整理了最常见的几种错误场景以及对应的修复方案:

常见错误类型及修复示例

1. CASE表达式缺少WHEN条件

很多人会不小心写出没有WHEN就直接THEN的代码,比如:

-- 错误写法:直接跳到THEN,没有WHEN条件
CASE 
    THEN Salary + Bonus
END AS TotalComp

修复方法:补上对应的WHEN条件,必要时加上ELSE分支(虽然ELSE可选,但建议加上避免返回NULL):

CASE 
    WHEN Bonus IS NOT NULL THEN Salary + Bonus
    ELSE Salary  -- 可选但推荐的默认分支
END AS TotalComp

2. CASE表达式的基础结构错误

比如在简单CASE格式里多写了标点,或者结构混乱:

-- 错误写法:CASE后面的表达式后多了逗号
CASE EmployeeType,
    WHEN 'FullTime' THEN Salary + Bonus
    WHEN 'PartTime' THEN Salary
END AS TotalComp

修复方法:去掉多余的标点,保证简单CASE的结构是CASE <目标表达式> WHEN <匹配值> THEN <结果> ... END:

CASE EmployeeType
    WHEN 'FullTime' THEN Salary + Bonus
    WHEN 'PartTime' THEN Salary
END AS TotalComp

3. THEN后面没有有效返回表达式

如果THEN后面是空的,或者表达式本身有语法错误(比如未闭合的括号、不存在的列名),也会触发这个错误:

-- 错误写法:THEN后没有返回值
CASE 
    WHEN Bonus > 0 THEN 
    ELSE Salary
END AS TotalComp

修复方法:给THEN补上合法的返回表达式:

CASE 
    WHEN Bonus > 0 THEN Salary + Bonus
    ELSE Salary
END AS TotalComp

针对你的存储过程的排查步骤

  1. 找到GetTotalComp存储过程的第19行,仔细检查该行及上下1-2行的CASE表达式
  2. 确认CASE表达式符合两种合法格式之一:
    • 简单CASE:针对某个表达式的固定值匹配
    • 搜索CASE:针对多个独立条件判断
  3. 检查是否有拼写错误、多余的逗号/分号,或者未闭合的括号

如果能提供第19行附近的代码片段,我可以帮你更精准地定位问题,但按照经验,以上几种场景基本能覆盖你的问题。

内容的提问来源于stack exchange,提问作者Kurt Morrison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:18:35