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

可能是您的存储过程不返回任何值吗?尝试必须返回至少一个值的函数。如果你想使用存储过程,那么你必须添加一个out参数。

于 2012-05-13T09:38:43.387 回答