Использование переменных в SQL 2008 для возврата более одной записи - PullRequest
1 голос
/ 25 ноября 2008

Я почти уверен, что это неправильный способ сделать это, поэтому я ищу несколько предложений.

Я не думаю, что моя проблема в том, что я пытаюсь решить пространственную проблему. Я просто не уверен, что есть хороший способ взять широту и долготу и вернуть тип данных geography в операторе select. Я успешно создал столбец географии и ввел данные.

Use thedatabase;
GO
Declare @Lat numeric(11,6)
Declare @Long numeric(11,6)
DECLARE @g geometry;




Select @Lat = Latitude, @Long = Longitude
from dbo.thetable

set @g = geometry::STGeomFromText('POINT (' + Cast(@Lat as varchar(30)) + ' ' + CAST(@Long as varchar(30)) + ')', 0);


select @g

Ответы [ 2 ]

1 голос
/ 01 февраля 2009

Тип геометрии следует использовать только для проецируемых данных. Поскольку у вас уже есть непроецированные данные широты и долготы, вы должны использовать вместо этого тип Geography. Также есть статический метод для создания точек:

SELECT geography::Point(t.lat, t.lon, 0) FROM yourtable t
1 голос
/ 28 ноября 2008

Можете ли вы уточнить, что вы хотите сделать?

Если вопрос связан с использованием текста - насколько я понимаю, формат WKT здесь вполне нормальный, поэтому не проблема.

Если вы хотите вернуть несколько геометрических значений, что-то вроде:

SELECT geometry::STGeomFromText('POINT (' + CAST(Latitude as varchar(30))
     + ' ' + CAST(Longitude as varchar(30)) + ')', 0)
FROM dbo.thetable

Если вы хотите работать с несколькими геометриями, объявите переменную таблицы и вставьте результаты такого запроса:

DECLARE @data TABLE (location geometry)
INSERT @data (location)
SELECT geometry::STGeomFromText('POINT (' + CAST(Latitude as varchar(30))
     + ' ' + CAST(Longitude as varchar(30)) + ')', 0)
FROM dbo.thetable

и работа с @data в качестве набора данных

...