T-SQL CASE语句WHEN条件中变量赋值数字语法错误原因查询
错误原因
你混用了T-SQL中CASE表达式的两种语法格式,同时存在关键字错用问题,共同触发了语法报错:
- T-SQL的
CASE分为两类语法,你开头写了CASE @LengthOfString,属于简单CASE表达式的声明,这种格式要求WHEN后只能接直接匹配的常量值,不能写完整的判断表达式@LengthOfString = 5,不符合语法规则所以抛出等号附近语法错误的提示。 - 你在
THEN分支中使用了RETURN关键字,当前你是把CASE的运行结果赋值给@FormattedString变量,RETURN是直接终止函数并返回结果的关键字,不能嵌套在赋值语句的表达式内部。
修正方案
方案1:使用简单CASE表达式(适合仅按长度值精确匹配的场景)
直接在WHEN后写要匹配的长度值即可:
SET @FormattedString = CASE @LengthOfString WHEN 5 THEN FORMAT(/* 此处填写你实际的格式化逻辑 */) WHEN 6 THEN FORMAT(/* 其他长度对应的格式化逻辑 */) -- 补充其他需要的WHEN分支 ELSE @PassedString -- 兜底逻辑,可按需调整 END
方案2:使用搜索CASE表达式(适合需要判断长度区间等复杂条件的场景)
开头CASE后不跟变量,WHEN后写完整判断条件:
SET @FormattedString = CASE WHEN @LengthOfString = 5 THEN FORMAT(/* 格式化逻辑 */) WHEN @LengthOfString BETWEEN 6 AND 10 THEN FORMAT(/* 对应区间的格式化逻辑 */) -- 补充其他需要的WHEN分支 ELSE @PassedString END
方案3:直接返回结果无需赋值的写法
如果你不需要中间变量存储结果,可以直接在RETURN后接CASE表达式:
RETURN CASE @LengthOfString WHEN 5 THEN FORMAT(/* 格式化逻辑 */) -- 其他分支 ELSE @PassedString END
内容的提问来源于stack exchange,提问作者Samuel V
相关产品推荐
相关产品推荐

