Update语句-地理列-sql server

Update语句-地理列-sql server,sql,sql-server-2008,Sql,Sql Server 2008,在sql server中更新地理列与常规字段(varchar…)不同吗。你能提供一份这样做的示例声明吗。谢谢 我不确定这是否是您要寻找的答案-但正如我所说,主要区别在于,在更新“常规字段”时,您通常直接提供新值-例如: UPDATE mytable SET name = 'John' WHERE id = 1 更新地理列时,您可能无法直接提供值(因为它是一个非常长的十六进制数,编码地理信息),但您需要从其他一些值(可以,但不必是同一表格的列)计算该值,例如: 其中,lng和lat是以“人类可读

在sql server中更新地理列与常规字段(varchar…)不同吗。你能提供一份这样做的示例声明吗。谢谢

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

UPDATE mytable SET name = 'John' WHERE id = 1
更新地理列时,您可能无法直接提供值(因为它是一个非常长的十六进制数,编码地理信息),但您需要从其他一些值(可以,但不必是同一表格的列)计算该值,例如:


其中,
lng
lat
是以“人类可读”格式指定GPS坐标的varchar值(如
lat='48.955790'
lng='20.524500'
)-在这种情况下,如果您将纬度经度作为小数,它们也是
mytable的列,您可以更新地理列,如下所示:

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;

感谢这一点,我不知道这些地理数据类型是如何工作的。很明显,Sql Server 2008 R2中的导入/导出向导也不理解-它不允许我将包含此列的表导入到另一个数据库中。几年后,我回到这个答案,并对POINT()调用的长LAT参数顺序进行了二次猜测。MS使用LONG/lat与我们大多数人使用lat/LONG的谈话方式相反,这是正确的顺序,也很有趣。更多信息请点击这里
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;