2017-05-07 4 views
0

の値を返す続ける私はいつも何が起こっている1SQL Severのストアドプロシージャは、1

を返しかかわらず、それに渡された値の一定値、 を返す必要があります知っているが、これは、以下の次のコードを持っていますか?

CREATE PROC spConvert    
    @date date, 
    @convertFrom varchar(20), 
    @convertTo varchar(20), 
    @value money output 
AS 
    SELECT @value = value 
    FROM Conversion 
    JOIN Currency AS c1 ON ToID = c1.currencyID 
    JOIN Currency AS c2 ON FROMID = c2.currencyID 
    WHERE c1.name = @convertTo 
    AND c2.name = @convertFrom 
    AND @date BETWEEN StartDate AND EndDate      

    IF @value IS NULL 
    (SELECT @value = Value 
     FROM Conversion 
     JOIN Currency AS c1 ON ToID = c1.currencyID 
     JOIN Currency AS c2 ON FromID = c2.currencyID 
     WHERE c1.name = @convertTo 
     AND c2.name = @convertFrom 
     AND Enddate IS NULL) 

    PRINT @value 

    RETURN @value 

は、その後、私は

declare @print money 

    exec @print= spConvert @date ='2017-05-25', 
         @convertFrom='euro', @convertTo='dollar', 
         @value = @print output 
    print @print 

を実行し、私はそれを得ることはありません

1.44 ----(which is correct) 
1.0  ----(not correct) 

を取得しますか?

+1

タグあなたの質問を使用しているデータベースで。 –

答えて

0

SQL Serverでは、ストアドプロシージャは整数である成功値を返します。私はmoney型を与えられたときにストアドプロシージャが何をするのか分かりません。

ただし、としてそれを実行する必要があります:それは何かを返すか、ステータス値を返していないので、あなたはまた、ストアドプロシージャを調整する必要があり

declare @print money; 

exec spConvert @date='2017-05-25', @convertFrom='euro', @convertTo='dollar', @[email protected] output ; 

print @print; 

EDIT:

私はまた、あなたのストアドプロシージャが一つだけの文で構成されていることに注意してください。 BEGINENDを使用します。

CREATE PROC spConvert (    
    @date date, 
    @convertFrom varchar(20), 
    @convertTo varchar(20), 
    @value money output 
) AS 
BEGIN 
    SELECT @value = value 
    FROM Conversion c JOIN 
     Currency c1 
     ON c.ToID = c1.currencyID JOIN 
     Currency c2 
     ON c.FROMID = c2.currencyID 
    WHERE c1.name = @convertTo AND c2.name [email protected] AND 
      @date BETWEEN StartDate AND EndDate      

    IF @value is null -- This seems dangerous, because @value is not initialized in the stored procedure 
    BEGIN 
     SELECT @value = Value 
     FROM Conversion c JOIN 
      Currency c1 
      ON c.ToID = c1.currencyID JOIN 
      Currency c2 
      ON c.FromID = c2.currencyID 
     WHERE c1.name = @convertTo AND c2.name = @convertFrom AND 
       Enddate is null   
     ) 
    print @value; -- I don't know what this is for 
END; 
+0

それは感謝した。 printステートメントは、値がreturnステートメントの前にヌルであるかどうかを教えてくれました。なぜ値が最後に1に変更されたのか理解できませんでした。 –

+0

あなたの答えは、OPが印刷物に1.0をどのように取得しているのかを説明することを望んでいました。 OPが提供したコードで私には不可能だと思われる – CodingYoshi

関連する問題