由于语法不正确,调用存储过程失败

时间:2012-05-13 09:30:17

标签: sql sql-server tsql stored-procedures

我有这个当前的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运行它时,它会失败。

知道为什么吗?

2 个答案:

答案 0 :(得分:3)

您只能使用exec调用存储过程。无法在select内运行存储过程。

考虑将您的程序转换为scalar user-defined function

示例函数使用(不要忘记模式名称,通常是“dbo”):

select  dbo.GetHighestDrop( ((clmnA/clmnB)-1)*100, 2, 3) as Col1
from    dbo.tstTable

答案 1 :(得分:0)

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