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

SQL Server中CASE语句赋值变量报错:FROM关键字附近语法错误

问题分析与解决

你的错误源于CASE语句的逻辑分支嵌套错误——你把针对@Test='No'的分支逻辑错误地嵌入到了@Test='YES'分支的字符串拼接内容里,导致SQL解析器在解析到from关键字时,前面的CASE结构没有正确闭合,触发了语法错误。

修正后的代码

DECLARE @Test VARCHAR(10)='Yes';
DECLARE @strTest VARCHAR(max);
DECLARE @Project_Id INT = -- 这里替换为你的项目ID实际值

SELECT @strTest = 
    CASE 
        -- 当@Test为YES时,拼接Column1和Column2的内容
        WHEN @Test = 'YES' THEN 
            '{ status:"' + ISNULL(column1,'') + '", dateLabel:'''+ 
            CASE WHEN column1='complete' THEN ISNULL(CAST(column1_dt AS VARCHAR(30)),'') ELSE ISNULL(column1_owner,'') END + 
            ''', title: ''''Initiate Column1 '''' + '},' +
            '{ status:"' + ISNULL(column2,'') + '", dateLabel:'''+ 
            CASE WHEN column2='complete' THEN ISNULL(CAST(column2_dt AS VARCHAR(30)),'') ELSE ISNULL(column2_owner,'') END + 
            ''', title: ''''Update Column2'''' + '}'
        -- 当@Test为No或Null时,只拼接Column1的内容
        WHEN @Test = 'No' OR @Test IS NULL THEN 
            '{ status:"' + ISNULL(column1,'') + '", dateLabel:'''+ 
            CASE WHEN column1='complete' THEN ISNULL(CAST(column1_dt AS VARCHAR(30)),'') ELSE ISNULL(column1_owner,'') END + 
            ''', title: ''''Initiate Column1 '''' + '}'
        -- 默认空值(如果@Test是其他非预期值)
        ELSE ''
    END 
FROM [Project] 
WHERE project_id = @Project_Id;

关键修正点

  • 理顺CASE逻辑层级:将原本错误嵌套在@Test='YES'分支里的@Test='No'分支逻辑,移到外层CASE的独立WHEN分支中,确保整个CASE结构在FROM关键字前正确闭合。
  • 修正单引号转义:SQL中字符串内的单引号需要用两个单引号转义(比如''''Initiate Column1 ''''),修复了原代码中可能存在的单引号配对问题。
  • 优化JSON格式:移除了原代码中YES分支末尾多余的逗号,保证拼接出的内容符合JSON对象数组的格式规范。

另外提醒:如果@Project_Id对应的数据表存在多行记录,变量@strTest会被最后一行的结果覆盖。如果需要拼接所有行的内容,可以改用STRING_AGG函数或者循环拼接的方式,根据你的实际业务需求调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:37:30