两个SQL Server层/表

时间:2018-01-16 18:46:08

标签: sql-server sql-server-2016 spatial-query

我需要在两个空间表之间进行空间交集,每个空间表在SQL Server 2016中都有几何列。我有一块T-SQL,我从一个表(tableA)中获取一组多边形,然后使用每个多边形并对另一个表(tableB)执行STIntersects。我生成一系列独立的表,对应于tableA中多边形的数量。这些表具有相同的列。

declare @g geometry

declare @t Cursor 

Set @t = CURSOR FOR select Shape from admin where NAME1 = 'Jefferson'
open @t

FETCH Next FROM @t INTO @g
while @@FETCH_STATUS = 0
BEGIN
    Select * from ANC where ANC.Shape.STIntersects(@g) = 1
    FETCH Next FROM @t INTO @g  
END;

返回正确的信息,并为每个相交的多边形提供结果表和单独的地图。下一步是将上面的各个输出组合成一个输出表,但我遇到了困难。我尝试过以下方法:

declare @g geometry

declare @t Cursor 

Set @t = CURSOR FOR select Shape from admin where NAME1 = 'Jefferson'

open @t

declare @firstone bit 
Set @firstone = 1 
FETCH Next FROM @t INTO @g
while @@FETCH_STATUS = 0
BEGIN
    IF @firstone = 1
    BEGIN
        Select * INTO #myTempTable from ANC where ANC.Shape.STIntersects(@g) = 1
        Set @firstone = 0
    END
    ELSE
    BEGIN
        Select * from #myTempTable UNION Select * from ANC where ANC.Shape.STIntersects(@g) = 1
    END;

    FETCH Next FROM @t INTO @g  
END;

Select * From #myTempTable

返回一个我们无法与地理数据类型建立联合的错误。有一个STUnion函数,但我没有看到使用两个表。一个更好的选择是能够在两个空间表之间执行空间身份功能,但还没有找到一个例子。但是,如果我可以在两个层之间进行空间交叉,然后结果的并集,那么我可以得到一个粗略的等价物。因此,我的第一步是让空间相交在两个空间层上工作。

1 个答案:

答案 0 :(得分:3)

你不需要光标。加入将在这里做

SELECT *
FROM table1 A 
INNER JOIN table2 b ON b.Shape.STIntersects(A.Shape) = 1
where A.NAME1 = 'Jefferson'