Update/Delete JSON SQL 服务器中的数组值

Update/Delete JSON array value in SQL Server

我的 table 中有一个 json 数组。它包含一个数组。我可以 createappend 或制作我的数组 NULL。在我的存储过程中,但我看不到从数组中获取 pop 值的任何方法。显然 JSON_Modify 可能有解决方案,因为您可以更新 key 以及 Single value 但是我如何使用它来修改我的数组?

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

更新后的预期结果:

'{"array":[123]}'

请注意 array 包含 int 值。这是我的 sub department id。所有值(应该)都是唯一的。

您可以使用:

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

因为我很着急,所以我按照以下方式解决了我的问题,但我真的建议不要使用它。请参阅上面@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