2011-11-25 34 views

回答

11

我不确定这是否是您正在寻找的答案 - 但正如我所说,主要区别在于,更新“常规字段”时,通常会直接提供新值 - 例如:

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

当更新地理列时,您可能无法直接提供值(因为它是一个非常长的十六进制数字,它编码地理信息),但您需要从其他值计算它(可以,但可以不必是同一表的列),例如:

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

其中lnglat是以“人类可读”格式指定GPS坐标的varchar值(如lat = '48.955790',lng = '20.524500') - 在这种情况下,它们也是mytable的列。

+0

感谢这个,我不知道这些地理数据类型是如何工作的。显然,Sql Server 2008 R2中的导入/导出向导并不理解 - 它不会让我将包含此列的表导入另一个数据库。 –

+0

几年后,我回到了这个答案,第二个猜测LONG参数的LONG参数顺序为POINT()调用。这是正确的顺序,它有趣的是MS使用LONG/lat,而不是我们大多数人谈论的方式,它是以经/纬度表示的。更多信息在这里http://stackoverflow.com/q/27297113/194872 –

0

如果你有纬度经度为小数,你可以更新地理列,如下图所示:

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;