2013-04-26 1 views
1

У меня есть эта функция, которая, хотя она возвращает значение правильно, появляется сообщение об ошибке в консоли управления с волнистыми красным подчеркиванием:SQL возвращает правильно, но показывает ошибку в Management Studio

Cannot find either column dbo or the user-defined function or aggregate

Причина это проблема в том, что я обнаружил, что это является причиной ошибки типа данных по линии.

Это функция:

CREATE FUNCTION CALC_DISTANCE(@A_LAT decimal(9,6), @A_LNG decimal(9,6), @B_LAT decimal(9,6), @B_LNG decimal(9,6)) 
RETURNS int 
AS 
BEGIN 
    DECLARE @source geography = geography::Point(@A_LAT, @A_LNG, 4326) 
    DECLARE @target geography = geography::Point(@B_LAT, @B_LNG, 4326) 
    DECLARE @MILES float = 0.00062137 
    DECLARE @D int = (SELECT @source.STDistance(@target) * @MILES * 1.08) 
    RETURN @D 
END 
GO 

DECLARE @A_LAT decimal(9,6) = '41.60054' 
DECLARE @A_LNG decimal(9,6) = '-93.60911' 
DECLARE @B_LAT decimal(9,6) = '25.77427' 
DECLARE @B_LNG decimal(9,6) = '-80.19366' 

SELECT dbo.CALC_DISTANCE(@A_LAT,@A_LNG,@B_LAT,@B_LNG) As 'CALC_DISTANCE (MILES)' 

Я новичок в функции SQL, так что это может быть новичку ошибкой.

Благодарим за помощь!

ответ

2

Если эта функция была только добавлена ​​вам необходимо «обновить кэш IntelliSense»:

Из окна редактора запросов, Edit(Menu)->IntelliSense->Refresh Local Cache. Это, конечно же, будет определять функцию только в том случае, если она была добавлена ​​до Обновление кэша: самый простой способ убедиться, что редактор SSMS имеет самую последнюю информацию: объявить функцию, обновить кеш, а затем использовать эту функцию.

Если он работает, то это нормально и SSMS просто спутать (возможно, из-за несвежего кэша, как указано выше) - красные загогулины являются на стороне клиента артефакт только и не всегда отражают выполнение запроса.

+0

Да, спасибо. Это удаляет сообщение об ошибке. – greener