2012-03-14 36 views
0

我有一个几何列一个PostGIS的数据库中的表中,假设名为roadpublic只是有2列如下表:PostGIS的 - 与几何列表迁移到SQL Server

COLUMN roadid UUID; COLUMN geom几何;

现在,我想使用Postgres Native OLEDB Provider将此表导入SQL Server(2012)数据库。该供应商的工作就像一个冠军,但它承认几何数据类型为nvarchar的(4000),因此这种结构在SQL Server中的数据的土地:

roadid geom 
5730048E-7988-4BF2-B5E4-E7DD2711E042 0105000020E6100000010...deleted... 
BB978741-BE77-456A-82FE-2D55F1417442 0105000020E6100000010...deleted... 
EE404EE4-CA09-4E78-842F-7C27307EAC89 0105000020E6100000010...deleted... 

的GEOM列转换为NVARCHAR(4000)。

理想情况下,以文本格式导出PostGIS中的实际坐标将是有益的,然后使用SQL Server geometry :: STGeomFromText将其转换为原生SQL Server几何数据类型。

任何人都可以提出这样做​​的策略吗?

谢谢!

回答

0

当你说它以SQL Server作为varchar(400)登陆时,你的意思是当你从你的源读取或者当你插入到你的目的地?因为如果你设法读取它很好,你可以使用“数据转换组件”来使它几何形状

0

我有同样的问题。我找到了一个解决方案,我正在努力适应我的查询。

DECLARE @data TABLE (
 
    ID nvarchar(1024), 
 
    ImportedGeometry nvarchar(100), 
 
    FinalGeometry geometry 
 
) 
 

 
    INSERT INTO @data (ID, ImportedGeometry) values ('1', '0xE6100000010C4703780B24B855C061C3D32B65093540') 
 
    INSERT INTO @data (ID, ImportedGeometry) values ('2', '0xE6100000010C96438B6CE7D359C0BD5296218E853440') 
 

 
select 
 
d.ID, 
 
d.ImportedGeometry, 
 
CONVERT(varbinary(max), d.ImportedGeometry, 1) as ConvertedGeometryBin, 
 
(cast(CONVERT(varbinary(max), d.ImportedGeometry, 1) as geometry)) as FinalGeometry 
 
from @data d 
 

 
UPDATE @data 
 
SET FinalGeometry = (cast(CONVERT(varbinary(max), ImportedGeometry, 1) as geometry)) 
 

 
select 
 
d.ID, 
 
d.FinalGeometry, 
 
d.FinalGeometry.STAsText(), 
 
d.FinalGeometry.STSrid 
 
from @data d