Я не могу найти ничего, что могло бы выполнить это в SQL Server 2008, но я также относительно новичок в SQL Server 2008 sql-функциях.
При работе с SQL Server 2008 я обычно проверяю форумы PostGIS и списки адресов электронной почты и вижу, как это делается (PostgreSQL-PostGIS занимается этим гораздо дольше). У кого-то, кажется, есть противоположная проблема как эта, которая, кажется, является результатом, к которому вы стремитесь.
К сожалению, нет ST_LineMerge (или STLineMerge), поэтому вам, вероятно, придется свернуть свой собственный.
Я не уверен, что эти примеры будут работать во всех случаях (а сами строки не в последовательном порядке):
select geometry::STGeomFromText(Replace(@g2.STSymDifference(@g1).ToString(),'))','),' + Replace(@g1.STIntersection(@g2).ToString(),'LINESTRING','') + ')'), @g1.STSrid).STAsText()
Вот та же логика с фактическими данными строки:
DECLARE @g1 geometry;
DECLARE @g2 geometry;
DECLARE @g3 geometry;
SET @g1 = geometry::STGeomFromText('LINESTRING(0 0, 0 20)', 0);
SET @g2 = geometry::STGeomFromText('LINESTRING(0 5, 0 10)', 0);
SELECT @g1.STIntersection(@g2).ToString();
SELECT @g1.STIntersection(@g2).STAsText();
SELECT @g2.STSymDifference(@g1).ToString();
select @g1.STIntersection(@g2).ToString();
SET @g3 = geometry::STGeomFromText(Replace(@g2.STSymDifference(@g1).ToString(),'))','),' + Replace(@g1.STIntersection(@g2).ToString(),'LINESTRING','') + ')'), @g1.STSrid);
select @g3.STAsText();