Sql 存储过程出错

Sql 存储过程出错,sql,sql-server-2008,stored-procedures,Sql,Sql Server 2008,Stored Procedures,我已经声明了一个游标来从过程外的表中获取max marks。 通过过程中的光标获取值。 但程序返回零。 请帮我找出错误 我正在使用以下代码 Declare Cur Cursor for select max(marks) from stu Procedure Alter procedure DMM(@max int output) as open Cur Fetch from Cur into @max close Cur 用于执行该过程的代码 declare @max int set @

我已经声明了一个游标来从过程外的表中获取max marks。 通过过程中的光标获取值。 但程序返回零。 请帮我找出错误

我正在使用以下代码

Declare Cur Cursor for select max(marks) from stu

Procedure

Alter procedure DMM(@max int output)
as
open Cur
Fetch from Cur into @max
close Cur
用于执行该过程的代码

declare @max int
set @max = 0
exec @max = DMM @max out
select @max as MaxValue

问题在于,您使用的变量存储输出参数与获取过程返回代码的变量相同。因此,返回代码(
0
)正在覆盖输出

您应该调用您的过程,如图所示:

declare @max int
declare @returnCode int

set @max = 0
exec @returnCode = DMM @max out
select @max as MaxValue

问题是您执行的过程不正确,以下是您应该如何执行:

declare @max int
set @max = 0
exec DMM @max output
select @max as MaxValue

除此之外,我同意marc_s的观点,为什么要使用光标?

@BlueFoots:谢谢你的格式化。为什么还要在这里创建一个光标来检索单个值。。。。。似乎完全是杀伤力过大,毫无用处。。。。只需使用dbo.stu中的
选择@max=max(Marks),您就完成了……@marc-他们也在重用变量,所以我猜他们是新手SQL@Marc_s,@JNK:是的,我是SQL新手,学习游标。我试着用上面的方法去做。我不能这样做吗?@Marc_s:这是使用游标的错误方式吗。如果是,请向我解释游标的正确用法。我提前表示感谢。非常感谢。我了解执行程序的正确方法。