如何从 SQL 服务器中的 JSON 数组中删除一个项目
How to delete an item from JSON array in SQL Server
如何从 SQL 服务器中的 JSON 数组中删除一个项目。
这是我的 JSON :
[
{
"nodeId": 15,
"nodeCondition": "needRepairing=true"
},
{
"nodeId": 16,
"nodeCondition": "needWashing=false"
}
]
存储在列中。我想通过 nodeId
.
删除元素
例如,如果你想删除 nodeId 16,那么你可以试试这个:
DECLARE @YourJson NVARCHAR(MAX) = N'[
{"nodeId":15,"nodeCondition":"needRepairing=true"},
{"nodeId":16,"nodeCondition":"needWashing=false"}
]';
SELECT * FROM (SELECT * FROM OPENJSON(@YourJson) WITH(nodeId
INT,nodeCondition NVARCHAR(MAX)) WHERE nodeId <> 16) AS R FOR JSON
AUTO;
GO
我认为你不能从 JSON 数组中删除一个项目,所以你需要再次解析、过滤和重建 JSON 数组。
Table:
SELECT *
INTO JsonTable
FROM (VALUES
(N'[
{"nodeId":13,"nodeCondition":"needRepairing=true"},
{"nodeId":14,"nodeCondition":"needRepairing=true"},
{"nodeId":15,"nodeCondition":"needRepairing=true"},
{"nodeId":16,"nodeCondition":"needWashing=false"}
]')
) v (JsonColumn)
声明:
UPDATE JsonTable
SET JsonColumn = (
SELECT nodeId, nodeCondition
FROM OPENJSON(JsonColumn) WITH (
nodeId int '$.nodeId',
nodeCondition nvarchar(1000) '$.nodeCondition'
)
WHERE nodeId NOT IN (13, 15)
FOR JSON PATH
)
结果:
JsonColumn
[{"nodeId":14,"nodeCondition":"needRepairing=true"},{"nodeId":16,"nodeCondition":"needWashing=false"}]
请注意,对于 JSON 对象,您可以使用 JSON_MODIFY()
删除特定键,使用 lax
模式和 NULL
作为新值。
如何从 SQL 服务器中的 JSON 数组中删除一个项目。
这是我的 JSON :
[
{
"nodeId": 15,
"nodeCondition": "needRepairing=true"
},
{
"nodeId": 16,
"nodeCondition": "needWashing=false"
}
]
存储在列中。我想通过 nodeId
.
例如,如果你想删除 nodeId 16,那么你可以试试这个:
DECLARE @YourJson NVARCHAR(MAX) = N'[
{"nodeId":15,"nodeCondition":"needRepairing=true"},
{"nodeId":16,"nodeCondition":"needWashing=false"}
]';
SELECT * FROM (SELECT * FROM OPENJSON(@YourJson) WITH(nodeId
INT,nodeCondition NVARCHAR(MAX)) WHERE nodeId <> 16) AS R FOR JSON
AUTO;
GO
我认为你不能从 JSON 数组中删除一个项目,所以你需要再次解析、过滤和重建 JSON 数组。
Table:
SELECT *
INTO JsonTable
FROM (VALUES
(N'[
{"nodeId":13,"nodeCondition":"needRepairing=true"},
{"nodeId":14,"nodeCondition":"needRepairing=true"},
{"nodeId":15,"nodeCondition":"needRepairing=true"},
{"nodeId":16,"nodeCondition":"needWashing=false"}
]')
) v (JsonColumn)
声明:
UPDATE JsonTable
SET JsonColumn = (
SELECT nodeId, nodeCondition
FROM OPENJSON(JsonColumn) WITH (
nodeId int '$.nodeId',
nodeCondition nvarchar(1000) '$.nodeCondition'
)
WHERE nodeId NOT IN (13, 15)
FOR JSON PATH
)
结果:
JsonColumn |
---|
[{"nodeId":14,"nodeCondition":"needRepairing=true"},{"nodeId":16,"nodeCondition":"needWashing=false"}] |
请注意,对于 JSON 对象,您可以使用 JSON_MODIFY()
删除特定键,使用 lax
模式和 NULL
作为新值。