2012-05-13 35 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參數。

相關問題