SQL选择,执行并显示所有行

时间:2013-07-25 21:12:46

标签: sql performance sql-server-2008

我尝试计算并订购用户和购物中心之间的距离(最近)。地点。我需要为每个商场行做这件事,但我不想使用"而#34;因为性能问题。我该怎么办?

以下代码仅显示执行后的最后一行。

@UserId INT
AS 
DECLARE
@UserLat DECIMAL(9,6),
@UserLon DECIMAL(9,6),
@MallLat DECIMAL(9,6),
@MallLon DECIMAL(9,6),
@geo1 geography,
@geo2 geography

SELECT TOP 1 @UserLat = l.Lat, @UserLon = l.Lon  FROM Location l WHERE l.UserId = @UserId ORDER BY l.LocationId DESC

SELECT @MallLat = m.MallLatitude, @MallLon = m.MallLongitude FROM Mall m

SET @geo1 = geography::Point(@UserLat, @UserLon, 4326)
SET @geo2 = geography::Point(@MallLat, @MallLon, 4326)

SELECT ROUND(@geo1.STDistance(@geo2)/1000,2)

1 个答案:

答案 0 :(得分:1)

您可以将计算结果放入SELECT的{​​{1}}。这将为您提供从MALL到每个@geo1行的排序距离:

MALL

我应该注意到我在SQL Server 2012上测试了这个,而不是你的版本 - 2008年。