2

この関数は、値を正しく返しますが、Management Console に赤い波線の下線でエラーを表示します。

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関数が初めてなので、これは初心者の間違いかもしれません。

ご協力いただきありがとうございます!

4

1 に答える 1

3

この関数が追加されたばかりの場合は、「IntelliSense キャッシュを更新する」必要があります。

クエリ エディタ ウィンドウから、Edit(Menu)->IntelliSense->Refresh Local Cache. もちろん、これは関数がキャッシュの更新に追加された場合にのみ検出されます。SSMS エディターが最新の情報を持っていることを確認する最も簡単な方法は、関数を宣言し、キャッシュを更新してから関数を使用することです。

実行された場合、問題はなく、SSMS が混乱しているだけです (おそらく上記のように古いキャッシュが原因です)。赤い波線はクライアント側のアーティファクトのみであり、クエリの実行を常に反映しているわけではありません。

于 2013-04-26T23:49:24.527 に答える