gpt4 book ai didi

tsql - 如何更新json对象中数组的特定项

转载 作者:行者123 更新时间:2023-12-04 15:40:51 24 4
gpt4 key购买 nike

我正在操作 SQL Azure 表/数据库中的 JSON 列,JSON 对象的形成方式如下:

{
"statusId": "5A5BC717-F33A-42A5-8E48-99531C30EC87",
"creationDateTime": "",
"assignations": [
{
"userId": "CA3B0589-B558-4FCC-93A6-560754D324FC",
"dateTime": "",
"isCurrentAssigned": false
},
{
"userId": "CA3B0589-B558-4FCC-93A6-560754D325E8",
"dateTime": "",
"isCurrentAssigned": false
},
{
"userId": "CA3B0589-B558-4FCC-93A6-560754D347N",
"dateTime": "",
"isCurrentAssigned": true
}
]
}

我想要完成的是在数组“assignations”中找到一个特定的元素,然后更新它的一些属性,就像这样:
UPDATE MyTable
SET JsonData = JSON_MODIFY(JsonData, '$.assignations.isCurrentAssigned', CONVERT(BIT, 0))
FROM MyDb
WHERE JSON_VALUE(JsonData, '$.assignations.isCurrentAssigned') = CONVERT(BIT, 1) AND
JSON_VALUE(JsonData, '$.assignations.userId') = CONVERT(UNIQUEIDENTIFIER, 'CA3B0589-B558-4FCC-93A6-560754D347N')

当然,此 T-SQL 不起作用,我将不胜感激对此的任何帮助

最佳答案

我找到了一个“简单的解决方法”来处理这个问题,也许它不是最好的解决方案,但我需要一个快速的解决方案,而且这是有效的。

基本上,我将数组转换为 T-SQL 表,根据需要更新该表上的记录,然后将该表转换为 JSON 数组,并使用该数组替换原始数组。

示例代码:

DECLARE @SomeJSON NVARCHAR(MAX) = 
'{
"statusId": "5A5BC717-F33A-42A5-8E48-99531C30EC87",
"creationDateTime": "abc",
"assignations": [
{
"userId": "5A5BC717-F33A-42A5-8E48-99531C30EC87",
"creationDateTime": "",
"isCurrentAssigned": false
},
{
"userId": "5A5BC717-F33A-42A5-8E48-99531C30EC87",
"creationDateTime": "",
"isCurrentAssigned": false
},
{
"userId": "5A5BC717-F33A-42A5-8E48-99531C30EC87",
"creationDateTime": "",
"isCurrentAssigned": true
}
]
}'


DECLARE @TblAssignations TABLE
(
userId UNIQUEIDENTIFIER NULL,
creationDateTime DATETIME NULL,
isCurrentAssigned BIT NULL
)

INSERT INTO @TblAssignations
SELECT *
FROM OPENJSON(@SomeJSON, '$.assignations')
WITH(userId UNIQUEIDENTIFIER, creationDateTime DATETIME, isCurrentAssigned BIT)

UPDATE @TblAssignations
SET isCurrentAssigned = 0
WHERE userId = '5A5BC717-F33A-42A5-8E48-99531C30EC87' AND
isCurrentAssigned = 1

INSERT INTO @TblAssignations
VALUES
(
'5A5BC717-F33A-42A5-8E48-99531C30EC87',
'',
1
)

DECLARE @NewParentAssignations NVARCHAR(MAX) = (SELECT * FROM @TblAssignations FOR JSON PATH)

SET @SomeJSON = JSON_MODIFY(@SomeJSON, '$.assignations', JSON_QUERY(@NewParentAssignations))

SELECT @SomeJSON

关于tsql - 如何更新json对象中数组的特定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41101242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com