У меня есть 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
первый. Если строка возвращается, приложение принимает данные широты и долготы и вычисляет переменные @max_Lng
, @Min_Lng
, @Max_Lat
и @Max_Long
, добавляя или вычитая константу 0,005. Эти переменные передаются в 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) + все близлежащие места. Я ищу предложения о том, как это сделать. Благодарю.
Испытано первый пример в приложении. Работает как шарм. Я тестировал 2 примера в скрипке, но не в приложении. Он работает в скрипке, поэтому я ожидаю, что он будет работать в приложении. Спасибо ** sgeddes **. –
** sgeddes **, я пошел вперед и изменил столбцы таблицы широты и долготы, чтобы плавать типы данных для более десятичных точек, что позволяет повысить точность. Спасибо –
@Machua - рад, что вы получили его на работу. С уважением! – sgeddes