2016-10-03 1 views
1

IDの列が私のtblResidentテーブルに4行あり、次のコードを実行すると私は4を返すことを期待していましたが、代わりに0を得ました。なぜこうなった?テーブルに "常駐"のカウントを返すストアドプロシージャを実行するとき、4を期待していますがゼロが得られました

create procedure spGetTotalResidentCount2 
as 
begin 
    return select count(ID) from tblResident 
end 

declare @TotalResident int 
execute @TotalResident = spGetTotalResidentCount2 
select @TotalResident 
+2

:以下のコードを確認してください。 –

+0

お寄せいただきありがとうコメントやヒントに感謝します。しかし、事は、私は現在、 "戻り値"対 "出力パラメータ"の概念を学んでいる、私は例で使用した構文は "戻り値"だと思うが、間違った結果を得ているなぜこれが起こっているのか、どうやって解決するのか不思議です。あなたのご親切に感謝します!! – Thor

答えて

1

値を返すのは、それらを選択するだけでなく、値を返すためです。プロシージャの本文をちょうどSELECT COUNT(ID) FROM tblResidentに変更します。

1

これを試してみてください:

CREATE PROC spGetTotalResidentCount2 
AS 
BEGIN 
    DECLARE @count INT; 
    SELECT @count = count(ID) FROM tblResident; 
    RETURN @count; 
END 
2

はこれが何をすべきこと

create procedure spGetTotalResidentCount2 as 
begin 
    set nocount on 
    select count(ID) from tblResident 
end 

execute spGetTotalResidentCount2 

か、機能させることができます:

create function dbo.fnGetTotalResidentCount2 returns int as 
begin 
    declare @count int 
    select @count = count(ID) from tblResident 
    return @count 
end 

をし、この

のようにそれを使用します
2

@TotalResidentフィールドに値を割り当てるには、OUTPUTの値を使用する必要があります。

create procedure spGetTotalResidentCount2 
(
    @countResident int out 
) 
as 
begin 
    set @countResident = 4 
end 

declare @TotalResident int = 0 
execute spGetTotalResidentCount2 @TotalResident out 
select @TotalResident 

ORあなたにもRETURNでそれを行うことができます。あなたは@TotalResidentフィールドにその値を代入したい場合は、出力パラメータとして数を返す必要があります

alter procedure spGetTotalResidentCount2 
as 
begin 
    return 4 
end 

declare @TotalResident int = 0 
execute @TotalResident = spGetTotalResidentCount2 
select @TotalResident 
2

使用OUTPUT句

create procedure spGetTotalResidentCount2 
@count int OUTPUT 
as 
    select @count = count(ID) from tblResident 

return 
GO 

declare @TotalResident int 
execute @TotalResident = spGetTotalResidentCount2 output 
select @TotalResident 
関連する問題