Обновление / удаление значения массива JSON в SQL Server - PullRequest
0 голосов
/ 28 апреля 2018

В моей таблице есть массив json. Содержит массив. Я могу create, append или сделать свой массив NULL. Внутри моей хранимой процедуры, но я не вижу пути к pop значению из массива. Очевидно, у JSON_Modify может быть решение, поскольку вы можете обновить key, а также Single value, но как я могу использовать его для изменения моего массива?

--My Array 
Declare @json = '{"array":[123,456]}'

Желаемые результаты после обновления:

'{"array":[123]}'

Обратите внимание, что array содержит int значений. Какие мои sub department id. Все значения (должны быть) уникальны.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Поскольку я спешил, я решил свою проблему следующим образом, но я очень рекомендую не использовать ее. Пожалуйста, смотрите ответ выше по адресу @ lad2025.

DECLARE @json VARCHAR(MAX)
                          =(SELECT jsonDept 
                            FROM tblEmployee 
                            WHERE tblEmployeeID = @empid)
    DECLARE @newjson VARCHAR(MAX)= (
    SELECT LEFT(subdept, LEN(subdept)-1)
    FROM (
    SELECT Distinct value + ', ' FROM OPENJSON(@json,'$.array') Where value <> @subdeptid
    FOR XML PATH ('')
    ) t (subdept))
    UPDATE tblEmployee SET jsonDept = '{"array":['+ @newjson +']}' WHERE tblEmployeeID = @empid
0 голосов
/ 28 апреля 2018

Вы можете использовать:

DECLARE @json NVARCHAR(MAX) = '{"array":[123,456]}';

WITH cte AS (
  SELECT *, MAX([key]) OVER() AS m_key
  FROM OPENJSON(@json, '$.array') s
)
SELECT JSON_QUERY('[' + IIF(MAX(m_key) = 0, '', STRING_AGG(value,',') 
                   WITHIN GROUP (ORDER BY [key])) + ']','$') AS array
FROM cte
WHERE [key] != m_key OR m_key = 0
FOR JSON AUTO, WITHOUT_ARRAY_WRAPPER;

Выход:

{"array":[123]}

DBFiddle Demo SQL Server 2017

...