更新sql server中的地理列与常规字段(varchar ....)不同。能否请您提供样本声明。谢谢。
答案 0 :(得分:13)
我不确定这是否是您正在寻找的答案 - 但正如我所说,主要的区别在于,在更新“常规字段”时,您通常会直接提供新值 - 例如:
UPDATE mytable SET name = 'John' WHERE id = 1
更新地理列时,您可能无法直接提供该值(因为它是一个非常长的十六进制数字,它对地理信息进行编码)但您需要从其他一些值(可以但不是必须是同一个表的列),例如:
UPDATE mytable SET gps=geography::STPointFromText('POINT(' + lng + ' ' + lat + ')', 4326)
其中lng
和lat
是varchar值,以“人类可读”的格式指定GPS坐标(如lat = '48.955790'
,lng = '20.524500'
) - 在这种情况下,它们是也是mytable
的列。
答案 1 :(得分: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;