更新语句 - 地理列 - sql server

dot*_*cks 6 sql sql-server-2008

更新sql server中的geography列与常规字段(varchar ....)不同.能否请您提供样本声明.谢谢.

Hel*_*ena 13

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

UPDATE mytable SET name = 'John' WHERE id = 1
Run Code Online (Sandbox Code Playgroud)

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

UPDATE mytable SET gps=geography::STPointFromText('POINT(' + lng + ' ' + lat + ')', 4326) 
Run Code Online (Sandbox Code Playgroud)

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


Pau*_*ndy 5

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

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;
Run Code Online (Sandbox Code Playgroud)