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

SQL Server嵌套JSON动态字段求最大值方案异常排查

问题根因

你的代码错误出在获取ID上下限的语句上:

SELECT @max_ID = MAX(ID),@min_ID = MIN(ID) FROM @col_table GROUP BY ColumnName;

你额外加了GROUP BY ColumnName,而@col_table里存在两个不同的列名(AEDAT、ERDAT),这条查询会返回两行结果。SQL Server中用查询给变量赋值时如果返回多行,变量只会保留最后一行的赋值结果。执行完这条语句后,你的@min_ID和@max_ID都会被赋值为2,因此循环只会执行1次,仅插入了ERDAT对应的5条数据,最终结果自然只有5条。

修复方案

简易修复

直接去掉上述语句中的GROUP BY ColumnName即可:

SELECT @max_ID = MAX(ID),@min_ID = MIN(ID) FROM @col_table;

修改后@min_ID为1、@max_ID为2,循环会执行两次,就能插入AEDAT、ERDAT对应的共10条数据,达到你要的UNION ALL效果。

更优方案(无需循环)

你可以用动态SQL直接拼接你需要的查询语句,执行效率更高,逻辑也更简洁:

DECLARE @sql nvarchar(max) = N''
SELECT @sql = @sql + N' UNION ALL SELECT JSON_VALUE(j.value,''$.' + ColumnName + N''') FROM OPENJSON(@json,''$.value'') AS j'
FROM @col_table

-- 去掉开头多余的UNION ALL
SET @sql = STUFF(@sql, 1, 10, N'')

-- 执行动态SQL
INSERT INTO @max_val (LastUpdatedValue)
EXEC sp_executesql @sql, N'@json nvarchar(max)', @json = @json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:54:03