2011-01-10 100 views
1

我使用此功能获得30英里内的事件,它几乎与书呆子晚餐一样。但是,我怎样才能以“最接近”的顺序排列呢?sql功能和最近的订单之间的距离

ALTER FUNCTION [dbo].[NearestEvents] 
    ( 
    @lat real, 
    @long real 
) 
RETURNS TABLE 
AS 
    RETURN 
    SELECT Events.ID 
    FROM Events 
    WHERE dbo.DistanceBetween(@lat, @long, Latitude, Longitude) <30 
+0

如果你想相同的结果,而是由衣柜订购,你可能需要将数据存储到包含列临时表DistanceBetween然后选择结果在DistanceBetween列中排序。这是一些额外的工作,因为它们之间的距离是即时计算的。 – Zachary 2011-01-10 23:49:03

回答

3

将它添加到您的SELECT列表中。

SELECT Events.ID, 
    dbo.DistanceBetween(@lat, @long, Latitude, Longitude) as distance 
    FROM Events 
    WHERE dbo.DistanceBetween(@lat, @long, Latitude, Longitude) <30 
    ORDER BY distance 

--since它仍然是不工作的OP调试存储过程的一个好办法是通过劫持的参数。与你的查询分析器试试这个,看看你得到:

DECLARE @lat = varchar(100); 
DECLARE @long = vavhar(100); 

SET @lat = 'XXXXX'; 
SET @long = 'XXXXX'; 

SELECT Events.ID, 
     dbo.DistanceBetween(@lat, @long, Latitude, Longitude) as distance 
     FROM Events 
     WHERE dbo.DistanceBetween(@lat, @long, Latitude, Longitude) <30 
     ORDER BY distance; 
+0

这是行不通的。 – raklos 2011-01-10 23:50:15