2010-09-01 169 views
1

我已經創建了以下存儲用戶定義它被成功執行。如何從sql select語句中調用存儲過程或存儲函數

CREATE FUNCTION spherical_distance1(@a float, @b float, @c float , @Lat float, @Lng float) 
RETURNS float 
AS 
BEGIN 
    RETURN (6371 * ACOS(COS(@a/@b) * COS(@Lat/@b) * COS(@Lng/@b - @c/@b) + SIN(@a/@b) * SIN(@Lat/@b)))  
END 

我面臨的問題是,在這裏,當我調用存儲功能spherical_distance1,它顯示錯誤,如「spherical_distance1」是無法識別的內置函數名稱。

SELECT *, spherical_distance1(12.9216667, 57.2958, 77.591667, Lat, Lng) AS distance 
FROM business3 
WHERE distance < 3 
AND StreetName LIKE '%jayanagar %' 
AND Keyword LIKE '%plumbing %' 
ORDER BY spherical_distance1(12.9216667, 57.2958, 77.591667, Lat, Lng); 

回答

1

的第一個錯誤 - 這是一個USERFUNCTION不是一個STOREDPROCEUDRE

二 - 給你打電話必須使用

SELECT dbo.functionName() 
用戶功能

因此對於您的情況

SELECT dbo.spherical_distance1(12.9216667, 57.2958, 77.591667, Lat, Lng) AS distance 
3

在SQL服務器中,需要在模式中爲函數名添加前綴。

最有可能的,你的將是DBO,所以嘗試調用

select *, 
    dbo.spherical_distance1(12.9216667 ,57.2958,77.591667,Lat ,Lng) as distance 
from 
    business3 
where 
    ((distance < 3) and (StreetName like '%jayanagar %') and (Keyword like '%plumbing %')) 
order by 
    distance -- don't need to repeat the function here 
0

您需要包含「dbo」。在查詢函數名之前...

相關問題