使用纬度和经度按距离排序

3

我正在尝试构建一个商店定位器,但是在编写SQL语句时遇到了困难。目前为止,我有以下代码:

SELECT TOP 3 Custno
    , ( 3959 
         * acos( cos( radians(36) ) 
           * cos( radians( Latitude ) ) 
           * cos( radians( Longitude )  - radians(120) )
           + sin( radians(120) ) * sin( radians( Latitude ) ) 
         ) 
       ) AS distance  
FROM Customers 
ORDER BY distance

当我运行该语句时,我得到了以下结果:
Msg 0, Level 11, State 0, Line 0
A severe error occurred on the current command.  
The results, if any, should be discarded.

然而,当我删除order by子句并将其更改为使用Custno时,查询可以正常工作。是什么导致了这个错误,我该如何避免它呢?


2
错误日志中是否有更多详细信息?请按照此处的说明在管理工具中查找错误日志:http://msdn.microsoft.com/en-us/library/ms187109.aspx - Ben Reich
我无法访问错误日志,只能访问服务器上的一个数据库。 - LT999
客户表很大吗?还是您可以将其插入到一个计算了距离的临时表中?这不是为生产而做,只是为了调试问题。 - Ben Reich
距离将从未存储的邮政编码计算,我不知道如何在只有一个位置的情况下存储距离。而且表中有几千条记录。 - LT999
你检查过查询计划了吗?可能错误是由于在计算和按距离排序时导致堆栈溢出引起的。你尝试将order-by拉入超级查询了吗? - Pieter Geerkens
我不确定如何做那个。什么是超级查询? - LT999
1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接