1
我有2個存儲過程從表Places
中檢索數據。這些過程一次由C#代碼調用。這些是表列。SQL Server 2008:一個存儲過程中的多個查詢
[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
,@Min_Lng
,@Max_Lat
和@Max_Long
變量。這些變量會傳遞給GetNearbyPlaces
sp,它會返回附近的地方,應用程序會在Google地圖上顯示原始地點以及附近的地點。
這工作正常,但有兩個往返數據庫,這不是很有效。 我想這兩個程序的東西組合成一個像
create procedure dbo.GetPlaces
@ID int
select * from dbo.Places as Row1
where [email protected]
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)+所有附近的地方。我正在尋找如何實現這一目標的建議。謝謝。
測試中的應用1例。奇蹟般有效。我在小提琴中測試了2個例子,但沒有在應用程序中。它工作在小提琴,所以我期望它在應用程序中工作。感謝** sgeddes **。 –
** sgeddes **,我繼續並將Latitude和Longitude表列更改爲浮點數據類型以獲得更多小數點,從而提高了精度。謝謝 –
@Machua - 很高興你能夠正常工作。親切的問候! – sgeddes