执行几何合并SQL语句遇Msg 1038错误:对象或列名缺失/为空
解决SQL Server几何合并操作的Msg 1038错误
你碰到的这个Msg 1038错误,核心原因很明确:SELECT INTO语句要求所有被选中的列必须有合法且明确的名称——你用geometry::UnionAggregate(geom.MakeValid())生成的合并几何列没有指定别名,SQL Server没办法自动给它分配一个符合规则的列名,所以直接抛出了这个报错。
修正后的SQL语句
只需要给聚合后的几何列添加一个有效别名(比如RegionGeometry,你也可以换成自己习惯的合法名称),就能顺利执行:
select b.[Region], geometry::UnionAggregate(geom.MakeValid()) AS RegionGeometry into dbo.DRShape from [dbo].[departements2] a join [dbo].[BM_REGIONFR] b on a.[code_insee] = b.[dep_2] group by b.Region
额外注意点
- 别名不能是空字符串,也不能仅用
[]包裹,必须是符合SQL Server标识符规则的名称(比如字母开头,不含特殊字符,或者用方括号包裹特殊命名)。 - 你用
MakeValid()预处理几何数据的做法很稳妥,能避免因为无效几何对象导致聚合操作失败,建议保留这一步。 - 执行完整语句前,可以先去掉
into dbo.DRShape单独跑SELECT部分,确认返回的列都有名称且数据符合预期,再执行建表操作。
内容的提问来源于stack exchange,提问作者amine bak
相关产品推荐
相关产品推荐

