SQL - openjson 从 json 中提取密钥

Saj*_*jal 6 sql t-sql sql-server parsing json

下面@json包含数组中的 3 个数据对象。使用OPENJSON将这些对象提取到表变量后,请参阅随附的输出。

DECLARE @json NVARCHAR(MAX);  
SET @json = N'[{"Container":"MSKU2913236","Seal":"ML-TH4773979","Size":"20","Temperature":"-20","TareWeight":"3.132","CreatedDate":"02-02-2018 00:00:00","Comment":null,"NetWeight":"21.445","TempRec#":null},{"Container":"MSKU3432702","Seal":"ML-TH4773972","Size":"20","Temperature":"-40","TareWeight":"2.872","CreatedDate":"02-02-2018 00:00:00","Comment":null,"NetWeight":"23.932","TempRec#":"TR12345"},{"Container":"MSKU4043053","Seal":"ML-TH4773973","Size":"20","Temperature":"-20","TareWeight":"2.995","CreatedDate":"02-02-2018 00:00:00","Comment":null,"NetWeight":"22.4","TempRec#":null}]';

DECLARE @ContainerTable TABLE(
    [Key] NVARCHAR(100),
    [Data] NVARCHAR(MAX)
);

INSERT INTO @ContainerTable
SELECT [key], [value] FROM OPENJSON(@json)

SELECT * FROM @ContainerTable
Run Code Online (Sandbox Code Playgroud)

输出

在此输入图像描述

目标是将所有 3 行的 Key列值替换Container为列中 json 的属性值。Data

预期输出

在此输入图像描述

注意:预期输出是硬编码的,它仅显示一行,但所有行都需要相同的输出。

Luk*_*zda 6

你可以使用JSON_VALUE

INSERT INTO @ContainerTable([Key], [Data])
SELECT JSON_VALUE([value],'$.Container'), [value]
FROM OPENJSON(@json);
Run Code Online (Sandbox Code Playgroud)

DBFiddle 演示