SQL Geography类型相交查询报错:隐式转换不允许问题求助
问题分析与解决
错误原因
你的查询存在一个核心逻辑错误:geography::STGeomFromText(@poligonoEspaña, 4326)这行代码完全多余且逻辑有误。STGeomFromText函数的第一个参数要求是WKT格式的字符串,但你传入的@poligonoEspaña已经是geography类型变量,SQL Server会尝试将geography类型隐式转换为字符串,这直接触发了报错提示里的“不允许隐式转换geography到nvarchar”问题。
修正后的SQL代码
直接使用已定义好的@poligonoEspaña变量调用STIntersects方法即可:
declare @poligonoEspaña geography; set @poligonoEspaña = geography::STGeomFromText('POLYGON(( -17.91124999999994 27.773750000000064, -17.963889999999935 27.682360000000074, -17.982779999999934 27.637500000000045, -18.014449999999954 27.649440000000084, -18.156109999999956 27.705280000000073, -18.169859999999915 27.735760000000084, -18.167499999999905 27.753610000000037, -18.16110999999995 27.76194000000004))', 4326); select * from [PeritosJudiciales].[dbo].[Inmueble] where Inmueble.Posicion is not null and @poligonoEspaña.STIntersects(Inmueble.Posicion) = 1;
额外注意事项
你定义的西班牙多边形是开放状态(起点与终点坐标不一致),不符合OGC规范,可能导致后续地理计算出现异常。建议将多边形的最后一个点与第一个点设为相同坐标,闭合多边形,比如在WKT末尾补充:-17.91124999999994 27.773750000000064))', 4326);
内容的提问来源于stack exchange,提问作者VoodooArts
相关产品推荐
相关产品推荐

