2012-03-14 4 views
0

내가 기하학 열이있는 PostGIS와 데이터베이스의 테이블이 다음과 같이 단 2 열이 roadpublic라는 테이블을 가정PostGIS와 - SQL Server에 구조 열이있는 테이블을 마이그레이션

COLUMN이 UUID를 roadid; COLUMN 기하학 기하학;

이제이 테이블을 Postgres Native OLEDB Provider를 사용하여 SQL Server (2012) 데이터베이스로 가져오고 싶습니다. 공급자는 챔피언처럼 작동하지만 그것은 NVARCHAR (4000) 그래서이 구조와 SQL 서버의 데이터 땅으로 지오메트리 데이터 유형을 인식합니다

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

기하 구조 열이 NVARCHAR (4000)로 변환됩니다.

PostGIS의 실제 좌표를 텍스트 형식으로 내 보낸 다음 SQL Server geometry :: STGeomFromText를 사용하여 기본 SQL Server geometry 데이터 형식으로 변환하는 것이 좋습니다.

누구나이 전략을 제안 할 수 있습니까?

감사합니다.

답변

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

관련 문제