Как вернуть несколько строк из вложенного объекта JSON, хранящегося в таблице - PullRequest
0 голосов
/ 16 февраля 2019

С учетом следующего JSON, хранящегося в столбце nvarchar(max), как сгенерировать показанную таблицу?Я могу сделать это для, если вложенный объект является [], массивом, но не структурой {}

DECLARE @JSON AS NVARCHAR(MAX);

SET  @JSON = N'{
    "ACCOUNT": 1
,   "USERS" : {
        "BOB" : 1
    ,   "JOHN" : 2
    ,   "RODGER" : 3
    }
}';


SELECT JSON_QUERY(@JSON,'$.USERS')


ACCOUNT   USER     USER_VALUE
================================
    1     BOB          1
    1     JOHN         2
    1     RODGER       3

1 Ответ

0 голосов
/ 16 февраля 2019

Вы можете попробовать следующий подход, используя OPENJSON (с явной структурой для столбцов ACCOUNT и USERS) и дополнительные CROSS APPLY:

-- JSON
DECLARE @JSON AS NVARCHAR(MAX);
SET  @JSON = N'{
    "ACCOUNT": 1
,   "USERS" : {
        "BOB" : 1
    ,   "JOHN" : 2
    ,   "RODGER" : 3
    }
}';

-- Statement
SELECT i.ACCOUNT, v.[key] AS [USER], v.[value] AS USER_VALUE
FROM OPENJSON(@json) 
WITH (
   ACCOUNT int '$.ACCOUNT',
   USERS nvarchar(max) '$.USERS' AS JSON
) i
CROSS APPLY (
   SELECT *
   FROM OPENJSON(i.USERS)
) v

Вывод:

ACCOUNT USER    USER_VALUE
1       BOB     1
1       JOHN    2
1       RODGER  3
...