0

私はこの現在のSPを持っています:

ALTER PROCEDURE [dbo].[GetHighestDrop]
  @val1 AS FLOAT ,
  @val2 AS FLOAT ,
  @val3 AS FLOAT 
AS
BEGIN
select case when @val1 < @val2 then
               case when @val1 < @val3 then @val1
               else @val3
               end
        when @val2 < @val3 then @val2
               else @val3
    end
END

私はそれをこの構文で呼んでいます:

SELECT
GetHighestDrop @val1=((clmnA/clmnB)-1)*100,@val2=2,@val3=3
FROM dbo.tstTable

clmnAとclmbBには、次のように別々に実行すると、数値が含まれます。

SELECT ((clmnA/clmnB)-1)*100 FROM dbo.tstTable

フロートである結果が得られますが、GetHighestDropを実行すると、失敗します。

なぜですか?

4

2 に答える 2

3

ストアドプロシージャは、でのみ呼び出すことができますexec。内でストアドプロシージャを実行する方法はありませんselect

プロシージャをスカラーユーザー定義関数に変換することを検討してください。

関数の使用例(スキーマ名、通常は「dbo」を忘れないでください):

select  dbo.GetHighestDrop( ((clmnA/clmnB)-1)*100, 2, 3) as Col1
from    dbo.tstTable
于 2012-05-13T09:39:40.867 に答える
0

ストアドプロシージャが値を返さない可能性がありますか?少なくとも1つの値を返さなければならない関数を試してください。ストアドプロシージャを使用する場合は、outパラメータを追加する必要があります。

于 2012-05-13T09:38:43.387 に答える