2011-11-25 22 views

risposta

11

Non sono sicuro se questa è la risposta che state cercando - ma come vorrei dire, la differenza principale è che durante l'aggiornamento di un "campo regolare", è in genere forniscono direttamente il nuovo valore - ad esempio:

Quando si aggiorna una colonna di geografia, probabilmente non si può fornire direttamente il valore (poiché è un numero esadecimale molto lungo, che codifica le informazioni di geografia) ma si vorrà calcolarlo da altri valori (che possono, ma non devono essere colonne della stessa tabella), ad esempio:

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

dove lng e lat sono valori varchar che specificano le coordinate GPS in un formato "leggibile" (come lat = '48.955790', lng = '20.524500'), in questo caso sono anche colonne di mytable.

+0

Grazie per questo, non avevo idea di come questi tipi di dati geografia lavorato. Apparentemente l'Import/Export Wizard in Sql Server 2008 R2 non capisce neanche - non mi permetterebbe di importare una tabella contenente questa colonna in un altro database. –

+0

Sono tornato a questa risposta anni dopo e ho indovinato l'ordine dei parametri LONG then LAT alla chiamata POINT(). È l'ordine corretto ed è interessante il fatto che MS usi LONG/lat in opposizione al modo in cui la maggior parte di noi parla che è in termini di lat/long. Maggiori informazioni qui http://stackoverflow.com/q/27297113/194872 –

0

Se hai Latitude e Longitudine come decimali, è possibile aggiornare una colonna geografia come illustrato di seguito:

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; 
Problemi correlati