2012-05-13 33 views
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包含数字,如果我seperately运行它们,如:

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

我得到的结果,这是一个浮动,但是当我通过GetHighestDrop运行它,它失败。

任何想法,为什么?

+0

相反的,你应该为此创造_function_一个存储过程。 – Oded

回答

3

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

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

实例功能使用(不要忘了架构名称,通常是“DBO”):

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

我已经添加了一个函数,但它仍然不起作用,语法是什么? –

+0

添加了一个调用标量函数的示例查询 – Andomar

0

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

相关问题