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
相关产品推荐
相关产品推荐

