You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

INSERT INTO迁移数据解析JSON数组为多列时报字段数量不匹配如何解决

问题解决方法

报错核心原因

  • 你的SELECT语句存在语法疏漏:[network_id] 后缺少逗号,会被数据库解析为 [network_id] AS [network_name],直接导致返回结果少1列,触发列数不匹配报错。
  • INSERT语句未显式指定插入列列表:如果直接使用INSERT INTO 目标表 SELECT ...的省略列写法,数据库会要求SELECT返回的列数量、顺序和目标表的全部字段完全对齐。你将单个focusJSON列拆分为两个独立字段后,SELECT返回的列结构和目标表默认字段顺序/数量不匹配,也会触发该报错。

正确写法示例

你需要先修正SELECT的语法错误,同时在INSERT语句中显式列出所有要插入的目标列,确保和SELECT返回的列一一对应:

INSERT INTO 你的目标表完整名称 (
    network_id,
    network_name,
    network_type,
    service_type_ids,
    military_focus,
    health_insurance_focus,
    created_at,
    updated_at,
    LoadDt,
    FileNM
)
SELECT
    [network_id],
    [network_name],
    [network_type],
    [service_type_ids],
    JSON_VALUE(focus,'$.military_focus') AS military_focus,
    JSON_VALUE(focus,'$.health_insurance_focus') AS health_insurance_focus,
    [created_at],
    [updated_at],
    [LoadDt],
    [FileNM]
FROM [Med_Stage].[Provider].[networks]

额外注意事项

如果目标表的military_focus和health_insurance_focus字段是布尔类型,你可以将JSON_VALUE的返回值显式转换为布尔类型,避免隐式类型转换异常:

  • SQL Server 环境可以写成:CAST(JSON_VALUE(focus,'$.military_focus') AS BIT) AS military_focus
  • MySQL 环境可以写成:CAST(JSON_UNQUOTE(JSON_EXTRACT(focus,'$.military_focus')) AS BOOLEAN) AS military_focus

内容的提问来源于stack exchange,提问作者Don

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:09:03