2012-08-15 109 views

回答

79

这取决于你想返回的信息的性质。

如果它是一个整数值,您可以使用return声明

create proc myproc 
as 
begin 
    return 1 
end 
go 
declare @i int 
exec @i = myproc 

如果你有一个非整数值,或者一些标量值,你可以使用输出参数

create proc myproc 
    @a int output, 
    @b varchar(50) output 
as 
begin 
    select @a = 1, @b='hello' 
end 
go 
declare @i int, @j varchar(50) 
exec myproc @i output, @j output 

如果你想返回一个数据集,你可以使用insert exec

create proc myproc 
as 
begin 
    select name from sysobjects 
end 
go 

declare @t table (name varchar(100)) 
insert @t (name) 
exec myproc 

你甚至可以返回游标不过这只是可怕,所以我不举一个例子:)

+9

对于整数,您仍然应该使用输出参数。保留他们设计的返回值:状态。好的程序员分离概念并编写可靠的代码。如果你的返回一个整数的存储过程发生故障会发生什么? – 2012-08-15 08:04:36

+0

我确实观察到了一个异常现象,当我返回一个小数时,它的小数位数是零,但是当我改变它来选择它时,它会正确地返回小数位数。 – Rama 2015-11-02 14:34:19

+2

@DRAM'return'返回单个**整数**值 – podiluska 2015-11-02 15:11:47

7

您可以在存储过程中使用return语句来返回整数状态码(并且只能是整数类型)。按照惯例,返回值为零用于成功。

如果没有明确设置return,则存储过程返回零。

CREATE PROCEDURE GetImmediateManager 
     @employeeID INT, 
     @managerID INT OUTPUT 
    AS 
    BEGIN 
    SELECT @managerID = ManagerID 
    FROM HumanResources.Employee 
    WHERE EmployeeID = @employeeID 

    if @@rowcount = 0 -- manager not found? 
     return 1; 
    END 

你这样调用它:

DECLARE @return_status int; 
DECLARE @managerID int; 

EXEC @return_status = GetImmediateManager 2, @managerID output; 
if @return_status = 1 
    print N'Immediate manager not found!'; 
else 
    print N'ManagerID is ' + @managerID; 
go 

您应该使用只有状态代码返回值。要返回数据,您应该使用输出参数。

如果要返回数据集,请使用类型为cursor的输出参数。

more on RETURN statement

+3

@downvoter,你介意解释什么是错的? – 2012-08-15 07:48:07

3

使用此代码,可以正常使用

CREATE PROCEDURE [dbo].[sp_delete_item] 
@ItemId int = 0 
@status bit OUT 

AS 
Begin 
DECLARE @cnt int; 
DECLARE @status int =0; 
SET NOCOUNT OFF 
SELECT @cnt =COUNT(Id) from ItemTransaction where ItemId = @ItemId 
if(@cnt = 1) 
    Begin 
    return @status; 
    End 
else 
    Begin 
    SET @status =1; 
    return @status; 
End 
END 

执行SP

DECLARE @statuss bit; 
EXECUTE [dbo].[sp_delete_item] 6, @statuss output; 
PRINT @statuss; 
相关问题