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
相关产品推荐
相关产品推荐

