2011-01-10 4 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 열에서 정렬됩니다. 두 거리 사이의 거리가 즉석에서 계산되기 때문에 약간의 추가 작업입니다. – Zachary

답변

3

선택 목록에 추가하십시오.

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

- 여전히 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

+1

쿼리가 누락되었습니다 : 'Events.ID, dbo.DistanceBetween (...' –

+0

쉼표를 추가했습니다. – Yada

관련 문제