Update/Delete JSON SQL 服务器中的数组值
Update/Delete JSON array value in SQL Server
我的 table 中有一个 json 数组。它包含一个数组。我可以 create
、append
或制作我的数组 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]}
因为我很着急,所以我按照以下方式解决了我的问题,但我真的建议不要使用它。请参阅上面@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
我的 table 中有一个 json 数组。它包含一个数组。我可以 create
、append
或制作我的数组 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]}
因为我很着急,所以我按照以下方式解决了我的问题,但我真的建议不要使用它。请参阅上面@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