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

SQL Server创建存储过程提示';'附近语法错误如何解决

错误原因
  • 直接触发报错的原因是批处理分隔符使用不规范:GO是SSMS、sqlcmd这类SQL Server客户端工具识别的批处理边界标记,不属于T-SQL标准语法,必须单独占一行,后面不能接分号。你代码中写的GO;会被T-SQL解析器判定为非法语法,抛出102号语法错误。
  • 代码存在隐性语法歧义风险:公用表表达式(CTE)的WITH关键字如果没有和前面的语句做明确终止,会被解析器误认为是查询提示(如表锁提示WITH (NOLOCK))的开头,属于不规范写法,在部分场景下也会触发语法错误。
  • 额外优化点:COUNT(Message)没有指定别名,返回的结果集对应列会显示无列名,不便于后续结果读取。
修正后可直接运行的代码
CREATE PROCEDURE GetValues @ValueName nvarchar(256)
AS
    -- CTE前加;明确标记语句终止,避免解析歧义
    ;WITH tmpTable AS 
    (
        SELECT * 
        FROM myTable 
        WHERE (Value = @ValueName AND Message IS NOT NULL)
    )
    SELECT 
        Message, COUNT(Message) AS MessageCount
    FROM 
        tmpTable
    GROUP BY 
        Message
GO -- 移除GO后的分号,保证GO单独成行

EXEC GetValues @ValueName = 'myvalue';

直接在SSMS中执行上述代码即可正常创建存储过程并返回统计结果,不会再出现分号附近的语法报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:47:06