9

は、私はこのコードで奇妙な問題を抱えている:私はそれを実行する場合、私はエラーを取得し、以下に示すように:無効な浮動小数点演算が発生しました。 SQL Server 2008の

An invalid floating point operation occurred.

しかし、私は(予告のみ、最後の桁がを変更)-98.508730 にパラメータ@Longitudeを変更した場合コードは正常に動作します。

コードでは、LatLngポイント付近の@MilesRadiusのプロパティがリストされています。
@Latitudeパラメータと@Longitudeパラメータは、テーブルAddressの経度と緯度フィールドと同じ型です。

ここでは何ができますか?ありがとう。あなたはそれを使用している

DECLARE @Latitude decimal (10,6); 
DECLARE @Longitude decimal (10,6); 
DECLARE @MilesRadius int; 
SET @Latitude = 29.607654 
SET @Longitude = -98.508731 
SET @MilesRadius = 5 

SELECT  ADR.LineOne as address, 
      ADR.City as city,   
      ADR.Latitude as latitude, 
      ADR.Longitude as longitude, 
      ((3959 * acos(cos(radians(@Latitude)) * cos(radians(ADR.Latitude)) * cos(radians(ADR.Longitude) - radians(@Longitude)) + sin(radians(@Latitude)) * sin(radians(ADR.Latitude))))) as distance 
FROM  Shared.Address ADR 
WHERE  ADR.Latitude IS NOT NULL AND 
      ADR.Longitude IS NOT NULL AND 
      (3959 * acos(cos(radians(@Latitude)) * cos(radians(ADR.Latitude)) * cos(radians(ADR.Longitude) - radians(@Longitude)) + sin(radians(@Latitude)) * sin(radians(ADR.Latitude)))) < @MilesRadius      
ORDER BY distance 
+2

)丸め誤差のために、あなたの質問私は – Lamak

+0

にそれを追加してください。申し訳ありませんが忘れてしまった。パラメータLatitudeとLongitudeは、Addressテーブルの緯度と経度のフィールドと同じ型です。小数点(10,6) – bobetko

答えて

10

唯一の機能は、ドメインエラーを返しACOSであり、それは、入力が範囲-1 to +1にないときにあなただけの(私は中間表現のようなものであると仮定しています。このケースをいじることができますが発生あなたは、変数を宣言するクエリの一部が欠落している1.000000000001

SELECT  ADR.LineOne as address, 
      ADR.City as city,   
      ADR.Latitude as latitude, 
      ADR.Longitude as longitude, 
      distance 
FROM  Shared.Address ADR 
CROSS APPLY (SELECT cos(radians(@Latitude)) * cos(radians(ADR.Latitude)) * cos(radians(ADR.Longitude) - radians(@Longitude)) + sin(radians(@Latitude)) * sin(radians(ADR.Latitude))) T(ACosInput) 
CROSS APPLY (SELECT ((3959 * acos(CASE WHEN ABS(ACosInput) > 1 THEN SIGN(ACosInput)*1 ELSE ACosInput END)))) T2(distance) 
WHERE  ADR.Latitude IS NOT NULL AND 
      ADR.Longitude IS NOT NULL AND 
      distance < @MilesRadius      
ORDER BY distance 
+1

ありがとうございます。うまくいく。 :-) – bobetko