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