2012-08-15 169 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; 
相關問題