在 T-SQL CASE 语句的 WHEN 条件中设置变量等于数字时语法不正确[关闭]

Posted

技术标签:

【中文标题】在 T-SQL CASE 语句的 WHEN 条件中设置变量等于数字时语法不正确[关闭]【英文标题】:Incorrect syntax when setting variable equal to a number in WHEN condition of T-SQL CASE statement [closed] 【发布时间】:2021-11-30 12:57:27 【问题描述】:

上下文:我有一个返回格式化字符串的标量函数。执行的格式化类型取决于传递的字符串的长度LEN() - 这由 T-SQL CASE 语句处理。

问题:为什么设置变量@LengthOfString等于数字时出现语法错误?

错误:

'=' 附近的语法不正确

相关代码:

CREATE OR ALTER FUNCTION FormatString
    (@PassedString varchar(255) NULL)
...

    DECLARE @FormattedString varchar(255)
    DECLARE @LengthOfString int = LEN(@PassedString)

    SET @FormattedString = (SELECT 
                                CASE @LengthOfString
                                    WHEN @LengthOfString = 5 
                                        THEN RETURN Format(<formatting>)
                                    WHEN ...

【问题讨论】:

您缺少一些相关代码,例如@PassedString 的定义和值,参见Minimal, Reproducible Example,以及实际 错误。 @Stu,谢谢。现在应该包括在内。 删除null - 这本身就是一个语法错误,声明的变量默认为null;DECLARE @LengthOfString int = len(@PassedString) 我还会阅读 case 的语法,因为您的代码片段也是语法错误,而 this 就是您的问题。 @Stu 谢谢。感谢您对问题格式和问题本身的帮助。 【参考方案1】:

删除CASE旁边的@LengthOfString

该语句应如下所示:

SET @FormattedString = (SELECT CASE 
 WHEN @LengthOfString = 5 THEN RETURN Format(<formatting>)
 WHEN ...

【讨论】:

以上是关于在 T-SQL CASE 语句的 WHEN 条件中设置变量等于数字时语法不正确[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

T-SQL:在 UPDATE 语句中使用 CASE 根据条件更新某些列

sql语句借助case when实现自动拼装where条件

python 如何在熊猫中做条件语句(CASE WHEN)

这两个case when end的条件语句查询结果为啥不一致

SQL语句中case,when,then的用法

在where条件中使用CASE WHEN 语句