我有 2 个存储过程,它们从名为Places
. 这些过程由 C# 代码一次调用一个。这些是表格列。
[ID] int NOT NULL IDENTITY(1, 1),
[Name] varchar(150) NOT NULL,
[Latitude] decimal(18, 2) NOT NULL,
[Longitude] decimal(18, 2) NOT NULL
这些是2个存储过程
CREATE procedure dbo.GetPlacesByID
@ID int
AS
SELECT *
FROM dbo.Places
WHERE ID = @ID
GO
和
CREATE procedure dbo.GetNearbyPlaces
@Min_Lat decimal(18, 2),
@Min_Lng decimal(18, 2),
@Max_Lat decimal(18, 2),
@Max_Lng decimal(18, 2)
AS
SELECT *
FROM dbo.Places
WHERE Latitude BETWEEN @Min_Lat AND @Max_Lat
AND Longitude BETWEEN @Min_Lng AND @Max_Lng
ORDER By ID ASC
GO
C# 应用程序首先调用GetPlacesByID
。如果返回一行,应用程序会获取纬度和经度数据,并通过添加或减去常数 0.005 来计算、和@max_Lng
变量。这些变量被传递给返回附近地点的 sp,应用程序在 Google 地图上显示原始地点和附近地点。@Min_Lng
@Max_Lat
@Max_Long
GetNearbyPlaces
这工作正常,但是数据库有两次往返,效率不高。我想将这两个程序合二为一,类似于
create procedure dbo.GetPlaces
@ID int
select * from dbo.Places as Row1
where ID=@ID
if Row1 is not null
Declare @Min_Lat decimal(18, 2),
Declare @Min_Lng decimal(18, 2),
Declare @Max_Lat decimal(18, 2),
Declare @Max_Lng decimal(18, 2)
Set @Min_Lat=Row1.Latitude - 0.005
Set @Min_Lng=Row1.Longitude - 0.005
Set @Max_Lat=Row1.Latitude + 0.005
Set @Max_Lng=Row1.Longitude + 0.005
select * from dbo.Places
where Latitude BETWEEN @Min_Lat AND @Max_Lat
and Longitude BETWEEN @Min_Lng AND @Max_Lng
....
该过程将返回原始行(Row1)+所有附近的地方。我正在寻找有关如何完成此任务的建议。谢谢。