存储过程的@return\u值是多少

iyr7buue  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(390)

昨天我创建了一个存储过程,它返回值98,-1,我不知道它是什么。
我试图找到这些代码的含义,但只发现0是成功的执行代码。
这是什么意思 @return_value 98 以及 @return_value -1 这就是我要说的。

yhqotfr8

yhqotfr81#

存储过程的“返回值”就是使用 return 声明。如果你没有明确的 return 语句,则该过程将返回值0。
让我们看一些例子。在第一个例子中,我使用了一个显式的return语句。我告诉程序返回值 1000 :

create or alter procedure p as begin
    set nocount on;
    return 1000; -- whatever value I want it to be
end
go

declare @returnvalue int; 
exec @returnvalue = p;
print concat('return value was ',@returnvalue); -- prints "return value was 1000"
go

这次我把return语句注解掉了。该过程将返回默认值0:

create or alter procedure p as begin
    set nocount on;
    -- return 1000; comment out the return -> no explicit return value
end
go

-- this code will print "return value was 0" because that's the default
declare @returnvalue int; 
exec @returnvalue = p;
print concat('return value was ', @returnvalue); 
go

我们可以随意使用返回值,但按照惯例,返回值用于提供有关过程成功或失败的信息。您可以使用它来返回“数据”,但为此您应该使用输出参数。
在下面的示例中,您可以看到一个非常标准的模式。如果不出差错,我们就把事情搞清楚了 try 拦住,然后击中 return 0 声明。为什么是零?这只是一个可以追溯到几十年前的惯例,这意味着“没有什么错,没有什么有意义的错误可以报告”。
但是在下面的代码中,我故意做了一些会导致错误的事情。这意味着我们无法到达 return 0 最后的陈述 try 阻止。
相反,执行将跳转到 catch 阻止。内部 catch 块i返回 error_number() 与我故意造成的错误有关。

create or alter procedure p as begin
    set nocount on;
    begin try
        -- deliberately do something that will cause an error
        declare @i int = 'abc';
        return 0; -- by pure convention, a return value of 0 means no error.
    end try begin catch
        print error_message();
        return error_number(); -- will be 245 because that's the error number of a conversion failure
    end catch
end
go

-- prints:
-- Conversion failed when converting the varchar value 'abc' to data type int.
-- return value was 245
declare @returnvalue int; 
exec @returnvalue = p;
print concat('return value was ', @returnvalue); 
go
idv4meu8

idv4meu82#

我认为您需要重新访问您编写的存储过程逻辑。你必须非常清楚你要回来的是什么。
以下是一些最佳实践:
使用return仅返回过程执行的执行状态。除过程执行状态外,不返回任何值。
要从过程返回标量值,请使用输出参数
要从过程返回多个值/结果集,请使用select语句。

相关问题