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

SQL Server中OPENJSON报错:如何通过JSON更新Products表

问题解决与代码修正

原代码的核心问题

  • UPDATE语句缺少FROM关键字,触发语法错误
  • key是SQL保留关键字,直接引用会报错,需用方括号[key]包裹
  • 未添加过滤逻辑跳过包含"electronics"的条目
  • 未显式指定OPENJSON的输出列名

修正后的完整代码

BEGIN
    DECLARE @source NVARCHAR(MAX) = '{"electronics.tv":200,"electronics.mobile":1000,"book.novel":500,"stationery.pen":300}'

    UPDATE p
    SET p.total_sales = u.total_sales
    FROM Products p
    INNER JOIN (
        -- 显式映射JSON字段到自定义列名,同时过滤目标条目
        SELECT 
            [key] AS product_name,
            CAST([value] AS INT) AS total_sales
        FROM OPENJSON(@source, '$')
        WHERE [key] NOT LIKE '%electronics%'
    ) AS u ON p.product_name = u.product_name
END

关键细节说明

  • 显式定义列名:通过SELECT子句将OPENJSON默认返回的[key]和[value]重命名为与Products表匹配的字段名;也可以直接用OPENJSON的WITH子句定义,示例如下:
    OPENJSON(@source, '$')
    WITH (
        product_name NVARCHAR(100) '$',
        total_sales INT '$'
    )
    
  • 过滤逻辑:使用WHERE [key] NOT LIKE '%electronics%'跳过所有包含"electronics"的JSON键值对
  • 语法修复:补充FROM Products p,并用[key]转义保留关键字,彻底解决语法报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:05:54