如何在两个几何表上进行UNION?

Kli*_*Max 5 sql-server

我尝试:

  SELECT 
  ,6 AS ObjectTypeId
  ,[GeomColumn] AS geom
  FROM [dbo].[myTable1]

  UNION

  SELECT 
  ,objTyleId AS ObjectTypeId
  ,[GeomColumn] AS geom
  FROM [dbo].[myTable2]
Run Code Online (Sandbox Code Playgroud)

但是出现了错误:

The data type geometry cannot be used as an operand to the UNION, INTERSECT or EXCEPT operators because it is not comparable.
Run Code Online (Sandbox Code Playgroud)

是否存在用几何列合并表的另一种方法?

ahm*_*der 5

有两种方法,

1)使用UNION ALL替代UNION

我们知道它们之间是有区别的,但也许可以满足您的需求。

2)使用CAST功能转换geometryvarbinary(MAX)

接下来:

Create table #myTable1 (ObjectTypeId int identity , GeomColumn geometry)
Create table #myTable2 (ObjectTypeId int identity , GeomColumn geometry)

INSERT INTO #myTable1 (GeomColumn)  
VALUES (geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0));  

INSERT INTO #myTable2 (GeomColumn)  
VALUES (geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0));  


select 1 AS ObjectTypeId , Cast( GeomColumn as varbinary(MAX)) geom 
from #myTable1
union 
select ObjectTypeId ,  Cast( GeomColumn as varbinary(MAX)) geom 
from #myTable2


Drop table #myTable1
Drop table #myTable2
Run Code Online (Sandbox Code Playgroud)

结果:一条记录通过使用显示UNION的是避免dublicated记录

在此处输入图片说明