2012-08-15 20 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

整数の場合は、引き続き出力パラメータを使用する必要があります。それらが設計されたものの戻り値を確保します:status。良いプログラマはコンセプトを分離し、ソリッドコードを書く。整数を返すストアドプロシージャが失敗した場合はどうなりますか? –

+0

私は小数点を返すときに小数点以下桁数はゼロですが、私はそれを選択すると小数点以下の桁を正しく返します。 – Rama

+2

@DRAM 'return'は単一の**整数**の値を返す – podiluska

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、何が間違っているのか説明してもらえますか? –

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; 
関連する問題