在SQL Server中提取JSON对象数据并插入临时表的方案咨询
解决方案:从SQL Server JSON列提取数据插入临时表
没问题,我来帮你搞定这个需求!核心思路是用SQL Server自带的OPENJSON函数解析JSON数组,把数组里的每个对象拆成单独的行,再关联原表的EntryId,最后插入到临时表中。
步骤1:创建目标临时表
如果临时表还不存在,先执行下面的语句创建它(注意根据你原表EntryId的实际类型调整字段类型,比如INT/UNIQUEIDENTIFIER等):
CREATE TABLE #TempTable ( EntryId INT, Name NVARCHAR(100), Note NVARCHAR(MAX), Description NVARCHAR(MAX) );
步骤2:提取JSON数据并插入临时表
假设你的原表名为YourTable,存储JSON数组的列名为JsonDataColumn,执行下面的语句就能完成数据提取和插入:
INSERT INTO #TempTable (EntryId, Name, Note, Description) SELECT t.EntryId, j.Name, j.Note, j.Description FROM YourTable t CROSS APPLY OPENJSON(t.JsonDataColumn) WITH ( Name NVARCHAR(100) '$.Name', Note NVARCHAR(MAX) '$.Note', Description NVARCHAR(MAX) '$.Description' ) j;
关键部分解释
CROSS APPLY OPENJSON(t.JsonDataColumn):OPENJSON会把JSON数组拆分成多行记录,CROSS APPLY相当于把原表的每一行和对应的JSON数组展开后的行进行关联,这样每个JSON对象都会对应原表的一个EntryId。WITH子句:用来定义JSON属性和输出列的映射关系,$.Name表示取JSON对象里的Name属性值,其他字段同理。
可选优化:处理无效JSON
如果你的JsonDataColumn可能存在NULL或者无效JSON,可以加个判断过滤掉这些行,避免报错:
INSERT INTO #TempTable (EntryId, Name, Note, Description) SELECT t.EntryId, j.Name, j.Note, j.Description FROM YourTable t WHERE ISJSON(t.JsonDataColumn) = 1 -- 只处理有效的JSON数据 CROSS APPLY OPENJSON(t.JsonDataColumn) WITH ( Name NVARCHAR(100) '$.Name', Note NVARCHAR(MAX) '$.Note', Description NVARCHAR(MAX) '$.Description' ) j;
这样就能完美实现你要的效果啦!
内容的提问来源于stack exchange,提问作者Cipher
相关产品推荐
相关产品推荐

