在 SQL Server 中处理地理数据时,有人遇到过 COMException 吗?
.Reduce()
在我运行原始邮政编码数据之前,我没有注意到错误。如果我让查询运行足够长的时间,它可能在那之前就已经发生了,但我尝试的大多数查询在我终止它们之前运行了很长时间(最多 5 小时,在一次情况下)。
我不完全确定如何调试这样的东西,因为它没有给我任何有用的错误代码,而且我在文档中找不到任何关于此类错误的信息。
错误如下:
Msg 6522, Level 16, State 1, Line 1
A .NET Framework error occurred during execution of user-defined routine or aggregate "GeographyUnionAggregate":
System.Runtime.InteropServices.COMException: Error HRESULT E_FAIL has been returned from a call to a COM component.
System.Runtime.InteropServices.COMException:
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
at Microsoft.SqlServer.Types.GLNativeMethods.ThrowExceptionForHr(GL_HResult errorCode)
at Microsoft.SqlServer.Types.GLNativeMethods.GeodeticCombine(CombineMode combineMode, GeoData g1, GeoData g2, Double eccentricity)
at Microsoft.SqlServer.Types.GeographyUnionAggregate.Terminate()
.
我可以使用以下代码生成它:
select
*
from
tblGeography
cross apply
(
select
geography::UnionAggregate(ZC_Geography) as NewGeom
from
tblGeographyDetail
join tblZipCode on ZC_Zip_Code like GD_Zip_Code
where
GD_GEO_ID=GEO_ID
) a
where
GEO_ID=2
我发现这个问题似乎与我尝试聚合的行数有关。我在聚合超过 5,000 行时出现错误,但在聚合少于 5,000 行时不会出现错误(嗯,同样的错误)。
我的解决方案最终是使用 分割和聚合行
ROW_NUMBER
,然后聚合这些组,如下所示: