Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
发生无效的浮点操作。SQL Server 2008_Sql_Sql Server 2008_Sql Server 2008 R2_Floating Point Exceptions - Fatal编程技术网

发生无效的浮点操作。SQL Server 2008

发生无效的浮点操作。SQL Server 2008,sql,sql-server-2008,sql-server-2008-r2,floating-point-exceptions,Sql,Sql Server 2008,Sql Server 2008 R2,Floating Point Exceptions,我对这段代码有一个奇怪的问题:如果我像下面所示运行它,我会得到错误: 发生无效的浮点操作。 但如果我将参数@Longitude更改为-98.508730(注意只更改了最后一个数字)代码工作正常 代码应该在某个LatLng点附近的@MilesRadius中列出属性。 @纬度和@Longitude参数与表地址中的经度和纬度字段的类型相同 我能在这里做什么?谢谢 DECLARE @Latitude decimal (10,6); DECLARE @Longitude decimal (10,6); D

我对这段代码有一个奇怪的问题:如果我像下面所示运行它,我会得到错误:

发生无效的浮点操作。

但如果我将参数
@Longitude
更改为-98.508730(注意只更改了最后一个数字)代码工作正常

代码应该在某个LatLng点附近的
@MilesRadius
中列出属性。
@纬度和@Longitude参数与表地址中的经度和纬度字段的类型相同

我能在这里做什么?谢谢

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
DECLARE@Latitude decimal(10,6);
声明@经度十进制(10,6);
声明@MilesRadius int;
设置纬度=29.607654
设置为经度=-98.508731
设置@MilesRadius=5
选择ADR.LineOne作为地址,
ADR.城市作为城市,
ADR.纬度作为纬度,
ADR.经度作为经度,
((3959*acos(cos(弧度(@纬度))*cos(弧度(平均纬度))*cos(弧度(平均经度)-弧度(平均经度))+sin(弧度(@纬度))*sin(弧度(平均经度);)作为距离)
来自共享地址ADR
其中ADR.纬度不为空,且
ADR.经度不为空且
(3959*acos(弧度(@纬度))*cos(弧度(平均纬度))*cos(弧度(平均经度)-弧度(@经度))+sin(弧度(@纬度))*sin(弧度(平均纬度)))<@MilesRadius
按距离排序

您正在使用的唯一返回域错误的函数是,当输入不在范围
-1到+1
时,会发生该错误,因此您可以处理这种情况(由于舍入错误,我假设中间表达式类似于
1.000000000001

选择ADR.LineOne作为地址,
ADR.城市作为城市,
ADR.纬度作为纬度,
ADR.经度作为经度,
距离
来自共享地址ADR
交叉应用(选择cos(弧度(@纬度))*cos(弧度(平均纬度))*cos(弧度(平均经度)-弧度(@经度))+sin(弧度(@纬度))*sin(弧度(平均纬度)))T(ACosInput)
交叉应用(选择((3959*acos(ABS(ACosInput)>1时的情况,然后签名(ACosInput)*1否则ACosInput结束)))T2(距离)
其中ADR.纬度不为空,且
ADR.经度不为空且
距离<@MilesRadius
按距离排序

您缺少查询中声明变量的部分,请将其添加到问题中。对不起,我忘了。参数纬度和经度与地址表中的纬度和经度字段的类型相同。十进制(10,6)
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