2011-11-25 14 views

Odpowiedz

11

Nie jestem pewien, czy jest to odpowiedź, której szukasz - ale jak powiedziałem, główna różnica polega na tym, że podczas aktualizacji "zwykłego pola" zwykle podajesz bezpośrednio nową wartość - na przykład:

UPDATE mytable SET name = 'John' WHERE id = 1 

Podczas aktualizowania kolumny geografii, to prawdopodobnie nie może zapewnić wartość bezpośrednio (ponieważ jest to bardzo długi numer szesnastkowy, który koduje informacje geoghraphy), ale będziemy chcieli, aby obliczyć go z niektórych innych wartości (które mogą, ale nie muszą to być kolumny tego samego stołu), np .:

UPDATE mytable SET gps=geography::STPointFromText('POINT(' + lng + ' ' + lat + ')', 4326) 

gdzie lng i lat są wartościami varchar określającymi współrzędne GPS w formacie "czytelnym dla człowieka" (jak lat = '48.955790', lng = '20.524500') - w tym przypadku są one również kolumnami mytable.

+0

Dzięki za to, że nie miał pojęcia, w jaki sposób pracował geografia te typy danych. Wygląda na to, że Kreator importu/eksportu w Sql Server 2008 R2 również tego nie rozumie - nie pozwoliłby mi zaimportować tabeli zawierającej tę kolumnę do innej bazy danych. –

+0

Powróciłem do tej odpowiedzi kilka lat później, a drugi odgadł kolejność parametrów LONG i LAT do wywołania POINT(). Jest to poprawna kolejność i jest interesująca, że ​​MS używa LONG/lat, w przeciwieństwie do sposobu, w jaki większość z nas mówi, co jest w zakresie lat/długo. Więcej informacji tutaj http://stackoverflow.com/q/27297113/194872 –

0

Jeśli masz Latitude i Długość jako dziesiętne, można zaktualizować kolumny geografii, jak pokazano poniżej:

DECLARE @latitude DECIMAL(15,6) 
    ,@longitude DECIMAL(15,6); 

SET @latitude = 29.938580; 
SET @longitude = -81.337384; 

UPDATE Properties 
SET Geog = GEOGRAPHY::Point(@latitude, @longitude, 4326) 
WHERE PropertyID = 858;