Sql server 2008 如何从空间查询更新表

Sql server 2008 如何从空间查询更新表,sql-server-2008,spatial,Sql Server 2008,Spatial,在SQL Server 2008中,我有两个表A和B: A lon(float) lat(float) name (nvarchar) B name (nvarchar) the_geom (geometry) 基本上,表B包含面积多边形,表A包含两列中的点坐标。如果lon/lat列中定义的点位于表B中的多边形内,我想用区域名称更新表A。正确的T-SQL命令是什么?这是我目前未成功的查询: UPDATE A SET name = (SELECT name FROM B WHERE the_g

在SQL Server 2008中,我有两个表A和B:

A
lon(float)
lat(float)
name (nvarchar)

B
name (nvarchar)
the_geom (geometry)
基本上,表B包含面积多边形,表A包含两列中的点坐标。如果lon/lat列中定义的点位于表B中的多边形内,我想用区域名称更新表A。正确的T-SQL命令是什么?这是我目前未成功的查询:

UPDATE A SET name = (SELECT name FROM B WHERE
the_geom.STIntersects(geography::Point([A.lat], [A.Lon], 4326))>0)

似乎你在混合空间类型和x/y。几何和地理是不同的

您可以将查询编写为:

UPDATE A SET name = (SELECT name FROM B WHERE 
    the_geom.STIntersects(
          geometry::STPointFromText(
               'POINT(' + [A.long] + ' ' + [A.lat] + ')', 4326
          )
    )=1)

我还没有尝试过上面的方法,但它应该能提供解决问题所需的一切。如果您想继续使用Geography,那么您也可以按原样创建,将其还原为WKB,然后通过WKB geometry::StGeometryFromWKBGeography::AsBinary将其转换为几何体实例。这听起来可能像是“dahh”,但您不应该使用deals.lon而不是a.lon吗


UPDATE deals SET area=从_geom.STIntersects geometry::STPointFromText'POINT'+[deals].[lon]+'+'+[deals].[lat]+,4326=1的区域中选择名称以下内容适用于我:

UPDATE Deals SET Area = (
    SELECT NAME FROM Areas WHERE 
        the_geom.STIntersects(
            geometry::STGeomFromText(
                'POINT(' + CAST(Deals.Lon AS varchar) + ' ' + CAST(Deals.Lat AS varchar) + ')',4326)
                ) = 1
    )

谢谢你的努力。我得到的列名“a.Lon”无效,即使表中有此列,但听起来这不是您面临的空间问题。。。如果你能发布表格创建脚本,我将把queryCREATE表格[dbo].[Areas][gid][int]标识1,1 NOT NULL、[NAME][nvarchar]256 NULL、[the_geom][geometry]NULL、约束[PK_导出_attiki]主键聚集[gid]ASC与PAD_INDEX=OFF、统计信息_norecocomputer=OFF、忽略_DUP_KEY=OFF、,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON,ON[PRIMARY]ON[PRIMARY]创建表[dbo].[Deals][Id][int]IDENTITY1,1不为NULL,[Lon][float]NULL,[Lat][float]NULL,[Area][nvarchar 500 NULL,CONSTRAINT[PK Deals Deals主键集群[Id]ASC带PAD\u INDEX=OFF,STATISTICS\u norecocomputer=OFF,IGNORE\u DUP\u KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON ON ON[PRIMARY]这是一个失败的查询:UPDATE deals SET area=SELECT name FROM_geom.STIntersects geometry::STPointFromText'POINT'+[A.lon]+'+[A.lat]+,4326=1很好地找到了,但它仍然给我同样的错误。在我看来,相关子查询无法解析外部表,因为它位于STPointFromText函数内。。。