Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2016中的JSON循环_Json_Sql Server_Sql Server 2016_Open Json - Fatal编程技术网

SQL Server 2016中的JSON循环

SQL Server 2016中的JSON循环,json,sql-server,sql-server-2016,open-json,Json,Sql Server,Sql Server 2016,Open Json,我有以下几个问题 { "href": { "host": "localhost", "port": 2222 }, "name": "20190812", "scheduledStartTime": "2019-08-12T12:22:52.500-04:00", "parameters": { "1251226": { "value": { "instanceID": 219002, "productNam

我有以下几个问题

{
  "href": {
    "host": "localhost",
    "port": 2222
  },
  "name": "20190812",
  "scheduledStartTime": "2019-08-12T12:22:52.500-04:00",
  "parameters": {
    "1251226": {
      "value": {
        "instanceID": 219002,
        "productName": "product1",
        "userID": "admin"
      }
    },
    "1251287": {
      "value": {
        "sgName": "sg1",
        "userID": "admin"
      }
    }
  }
}
我希望迭代JSON并逐个处理每个迭代。 我尝试使用,但给出了JSON的长度作为计数,但不知道如何逐个获取值

在SQL Server 2016中是否可能实现这一点

我已经试过了

Declare @count INT
select @count = COUNT(*) 
FROM OPENJSON((select template_data_mapping from template_data_mapping), N'$')

WHILE @count != 0
BEGIN
   SELECT @count
   SET @count = @count - 1;
END;
现在还不清楚为什么你…想要迭代JSON并逐个处理每个迭代。。。使用
WHILE
循环,但解析此JSON的一种可能的基于集合的方法是使用内置的JSON支持:

JSON:

声明:

SELECT 
   j1.host, j1.port, j1.scheduledStartTime, 
   j2.[key] AS parameter, 
   j3.[key], j3.[value]
FROM OPENJSON(@json) WITH (
   host varchar(100) '$.href.host',
   port int '$.href.port',
   name varchar(100) '$.name',
   scheduledStartTime varchar(30) '$.scheduledStartTime',
   parameters nvarchar(max) '$.parameters' AS JSON
) j1
OUTER APPLY OPENJSON(j1.parameters, '$') j2
OUTER APPLY OPENJSON(j2.[value], '$.value') j3
结果:

host        port    scheduledStartTime              parameter   key         value   
localhost   2222    2019-08-12T12:22:52.500-04:00   1251226     instanceID  219002  
localhost   2222    2019-08-12T12:22:52.500-04:00   1251226     productName product1
localhost   2222    2019-08-12T12:22:52.500-04:00   1251226     userID      admin   
localhost   2222    2019-08-12T12:22:52.500-04:00   1251287     sgName      sg1    
localhost   2222    2019-08-12T12:22:52.500-04:00   1251287     userID      admin   

到目前为止你都试了些什么??预期输出是什么??您希望从每次迭代中获得什么数据-可能是来自
参数
JSON数组的值?如果是,您希望如何处理这些值?
host        port    scheduledStartTime              parameter   key         value   
localhost   2222    2019-08-12T12:22:52.500-04:00   1251226     instanceID  219002  
localhost   2222    2019-08-12T12:22:52.500-04:00   1251226     productName product1
localhost   2222    2019-08-12T12:22:52.500-04:00   1251226     userID      admin   
localhost   2222    2019-08-12T12:22:52.500-04:00   1251287     sgName      sg1    
localhost   2222    2019-08-12T12:22:52.500-04:00   1251287     userID      admin