2017-04-04 53 views
1

我正在阅读某人的代码,我不太明白这一点。这个查询在SQL Server中做了什么?

DECLARE @return int 
EXEC @return = dbo.Update 

如果您将return设置为整数,那么下一行是什么意思?你如何设置@返回到存储过程?存储过程是否被调用?

+4

是的,它被调用,并且proc的'RETURN'结果被设置为'@ return'。例如:如果在proc结尾有一个“RETURN 0”语句,执行后,“@ return”的值将为“0”。 – Siyual

+0

您是否尝试过运行它? –

+1

从技术上讲,这不是一个查询,而是一个“批次”。 – Hogan

回答

0

从存储过程返回return value。如果在过程中没有明确返回值(例如return 2;),那么它将返回0以成功执行,如果遇到错误,则返回负值。

参考:


这里有一些简单的例子:

create proc dbo.AllGood as 
begin; 
    select 1 as One into #temp; 
end; 
go 
create proc dbo.ReturnOneForOdd (@i int) as 
begin; 
    if (@i % 2) = 1 return 1; 
end; 
go 
create proc dbo.DivByZero as 
begin; 
    begin try 
    select 1/0; 
    end try 
    begin catch 
    end catch; 
end; 
go 

declare @r int; 

exec @r = dbo.AllGood; 
select @r as AllGood; /* returns 0 */ 

exec @r = dbo.ReturnOneForOdd 1 ; 
select @r as ReturnOneForOdd; /* returns 1 */ 

exec @r = dbo.ReturnOneForOdd 2; 
select @r as ReturnOneForOdd; /* returns 0 */ 

exec @r = dbo.DivByZero; 
select @r as DivByZero; /* returns -6 */ 

rextester演示:http://rextester.com/WPNHX39195

+0

这是有道理的。谢谢! – TorontoUser

0

有关将存储过程输出存储到变量的更多详细信息,请参阅this link。并以OUTPUT变量作为参数存储过程。

4

是所存储的过程被调用和返回值被存储在@return

作为documentation说:

过程可以返回整数值称为返回代码以指示的执行状态程序。您可以使用RETURN语句指定过程的返回码。与OUTPUT参数一样,执行过程时必须将返回码保存在变量中,以便在调用程序中使用返回码值。例如,数据类型为int的分配可变@result用于从过程MY_PROC存储返回代码,如:

DECLARE @result int; 
EXECUTE @result = my_proc; 

返回代码在控制的流块常用程序来设置内每种可能的错误情况的返回码值。您可以在Transact-SQL语句之后使用@@ ERROR函数来检测执行语句期间是否发生了错误。

相关问题