I have two SQL Server spatial tables (one containing current records and one containing archived records) that I need to merge and read the features ordered by their version number in order to do onward processing in FME.Â
Â
I have been trying to use a SQLCreator to read these records into FME in the correct order using SQL similar to the below:Â
Select a.* from
(
        SELECT
    ,ttoid_version]
  ,ÂSHAPE]
FROMÂ /dbo].Âa_boundaryline]
Â
        union all
Â
        SELECTÂ
  ofid]
  ,/toid_version]
  , SHAPE]
             Â
        FROM dbo].>boundaryline]
Â
) as a
order by a.fid, a.toid_version
This SQL works in SQL Server management studio without issue. However, when I use it in a SQLCreator (or SQLExecutor) I get the following warning(s) in the log and the geometry is not read (i.e. features have no geometry):
Â
---
Microsoft SQL Server Spatial Reader: Query failed, possibly due to a malformed statement. Query Text `SELECT * INTO #fme_tempAdoDataTypeTable_spatialReader FROM ( Select a.* from(
 SELECT
 fid]
 ,itoid_version]
 ,tSHAPE]
Â
 FROM #dbo].ea_boundaryline]
 union all
 SELECTÂ
 fid]
 ,Âtoid_version]
 ,vSHAPE]
Â
 FROM >dbo].
) as a
where a.fid = 'osgb1000000522000310'
order by a.fid, a.toid_version ) AS customQuery WHERE 1=0'. Provider error `(-2147217900) The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP, OFFSET or FOR XML is also specified.'
Microsoft SQL Server Spatial Reader: Getting Custom SQL schema failed. Make sure all columns are named (any ambiguous columns, e.g. GEOM.STBuffer(1), must have an AS clause). If there is an ORDER BY clause, either remove it or add a TOP clause
Microsoft SQL Server Spatial Reader: Table `___FME_Custom_SQL_Statement___' does not include a spatial column. Geometry will not be read
Microsoft SQL Server Spatial Reader: Database read complete. Retrieved 3 feature(s)
---
Â
If I remove the order by from the SQL, there is no warning and the geometry is read correctly.Â
Â
Looking at the error, it appears that FME is wrapping my query SQL with additional SQL and this is causing the issue with order by. Â
Â
I have also tried a Common Table Expression using WITH in an attempt to work around the issue. This executes with no warnings, but again results in no geometry being read.Â
Â
I am aware that FME has a sorter transformer, but this would not be practical here as the data volumes are large (>100m records in some cases), hence the need to use order by to get the database to do the sorting.Â
Â
Has anyone seen this behaviour before with SQLCreator/Executor and SQL Server?Â
Â
I'm fairly sure I have used similar SQL in the past with older versions of FME and have not had this issue.
Â
Any ideas for a workaround that doesn't involve sorting inside FME?
Â
Â
Finally for Safe website bods, I'd just like to add that the form to create a post on this site is really poor. Very little space to type and options for text formatting are poor compared to similar forums elsewhere. Definitely requires improvement!