OPENJSON-如何从在SQL Server中另存为NVARCHAR的JSON对象中提取值

问题描述

RawData类型的列NVARCHAR,其中包含JSON对象作为字符串

RawData 
-------------------------------------------------------
{"ID":1,--other key/value(s)--,"object":{--object1--}}
{"ID":2,"object":{--object2--}}
{"ID":3,"object":{--object3--}}
{"ID":4,"object":{--object4--}}
{"ID":5,"object":{--object5--}}

此JSON字符串很大(1kb),当前此json中最常用的部分是object(200字节)。

我想使用OPEnjsON提取这些json字符串的对象部分。我无法实现解决方案,但我认为有解决方案。

我想要的结果是:

RawData 
----------------
{--object1--}
{--object2--}
{--object3--}
{--object4--}
{--object5--}

到目前为止我的尝试

SELECT * 
FROM OPEnjsON((SELECT RawData From DATA_TB FOR JSON PATH))

解决方法

看起来像这样对您有用。

样本数据

 obj.Add("connection.provider","Project.connection.AzureSQLDatabase");

解决方案

create table data_tb
(
  RawData nvarchar(max)
);

insert into data_tb (RawData) values
('{"ID":1,"key": "value1","object":{ "name": "alfred" }}'),('{"ID":2,"key": "value2","object":{ "name": "bert" }}'),('{"ID":3,"key": "value3","object":{ "name": "cecil" }}'),('{"ID":4,"key": "value4","object":{ "name": "dominique" }}'),('{"ID":5,"key": "value5","object":{ "name": "elise" }}');

查看实际情况:fiddle

,

类似这样的东西

 SELECT object 
 FROM DATA_TB as dt
 CROSS APPLY
 OPENJSON(dt.RawData) with (object     nvarchar(max) as json);