Непонятно, почему вы ... хотите перебрать JSON и обработать каждую итерацию одну за другой ... , используя WHILE
l oop, но один возможный набор Основанный на анализе JSON подход заключается в использовании встроенной поддержки JSON:
JSON:
DECLARE @json nvarchar(max) = N'{
"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"
}
}
}
}'
Оператор:
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