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

SQL Server存储过程创建报错:OUTPUT语法错误及变量未声明问题

报错原因排查
  • 核心语法错误:OUTPUT 是存储过程参数的专属修饰符,不能用于 DECLARE 声明的局部变量。你把需要输出的@y写在了AS之后的局部变量声明块里,触发第一处语法报错;因为解析失败,后续代码无法识别@y变量,进而触发第二处报错。
  • 隐藏逻辑问题:代码中的@x、@z仅做了声明没有赋值,就算修复语法问题,运算结果也会返回NULL,这两个变量应当作为存储过程的输入参数传入。
修正后代码

如果你需要@y作为输出参数返回给外部调用方,参考写法如下:

create procedure testproc8
    -- 所有参数统一写到存储过程名后的括号中,OUTPUT加在输出参数末尾
    @x int,
    @z int,
    @y money OUTPUT
as
begin
    set @y = (select (sum([OrderQty] * [UnitPrice]) / sum([OrderQty])) * @x
              from [dbo].[Transactions]
              where [ProductID] = @z
              group by [ProductID])
    return 
end

如果你不需要将@y返回给外部,只是作为过程内的局部变量使用,直接删除DECLARE @y money后的OUTPUT关键字即可解决报错。

调用示例(带输出参数的场景)
DECLARE @calculateResult money
-- 传入@x=2、查询ProductID=1的计算结果,输出赋值给@calculateResult
EXEC testproc8 @x=2, @z=1, @y=@calculateResult OUTPUT
SELECT @calculateResult

内容的提问来源于stack exchange,提问作者Rhuver Joshua Pedere

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 21:09:01