2011-11-25 19 views

cevap

11

Bunun aradığınız cevabı olup olmadığından emin değilim - ama dediği gibi, temel fark "normal alan" güncellerken, genellikle doğrudan yeni bir değer sağlamalarıdır - örneğin:

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

Coğrafya sütunu güncellenirken, muhtemelen değeri doğrudan sağlayamazsınız (çünkü geoghraphy bilgisini kodlayan çok uzun bir onaltılık sayıdır), ancak bunu diğer bazı değerlerden hesaplamak isteyebilirsiniz (aynı tablonun sütunları olmak zorunda değildir), örneğin:

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

burada lng ve lat, GPS koordinatlarını "insan tarafından okunabilir" biçiminde (lat = '48.955790', lng = '20.524500' gibi) belirten varchar değerleridir - bu durumda bunlar aynı zamanda mytable sütunlarıdır. aşağıda gösterildiği gibi

+0

Teşekkür, ben bu coğrafya veri türleri nasıl çalıştığını bilmiyordum. Görünüşe göre, Sql Server 2008 R2'deki Alma/Verme Sihirbazı, bu sütunu içeren bir tabloyu başka bir veritabanına aktarmama izin vermez. –

+0

Ben yıllar sonra tekrar bu cevap geldi ve ikinci NOKTASI() çağrısına UZUN sonra LAT parametre sırasını tahmin etti. MS'in uzun/lat yönünden konuştuğumuz yöntemin tersine, LONG/lat'i kullandığı doğru düzen ve ilginçtir. Daha fazla bilgi burada http://stackoverflow.com/q/27297113/194872 –

0

Eğer Latitude ve ondalık olarak Boylam varsa, bir coğrafya sütunu güncelleyebilirsiniz: Bunun için

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;