Как вызвать хранимую процедуру или хранимую функцию из оператора выбора SQL - PullRequest
1 голос
/ 01 сентября 2010

Я создал следующее сохраненное пользовательское определение, оно будет успешно выполнено.

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);

Ответы [ 3 ]

3 голосов
/ 01 сентября 2010

В 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
1 голос
/ 01 сентября 2010

Первая ошибка - это USERFUNCTION, а не STOREDPROCEUDRE

Второй - для вызова пользовательской функции, которую вы должны использовать

SELECT dbo.functionName()

так для вашего случая

SELECT dbo.spherical_distance1(12.9216667, 57.2958, 77.591667, Lat, Lng) AS distance
0 голосов
/ 01 сентября 2010

вам нужно включить «dbo».перед именем функции в вашем запросе ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...