我有一个表,其中有一列包含 JSON 对象。在这些对象中,我需要找到type
值为 3 的键。找到后,我需要price
在嵌套的 JSON 对象中用新值 99更新键data
。其他类型的价格应保持不变。如有任何帮助,我将不胜感激。谢谢你!
-- Create the new table
CREATE TABLE ModifiedTable (
accountIdentifier UNIQUEIDENTIFIER,
settings NVARCHAR(MAX)
);
-- Insert the modified values
INSERT INTO ModifiedTable (accountIdentifier, settings)
Values (
'8E9B45D7-8AEC-EA11-8B03-000D3A12F259',
'[{"type":3,"data":{"required":false,"price":0.5,"display_name":false}},{"type":5,"data":{"required":true,"scaling_factor":2.5, "price":1,"date_format":"yyyy-MM-dd"}}]'
),
(
'C03D12B1-8BEC-EA11-8B03-000D3A12F259',
'[{"type":7,"data":{"required":true,"scaling_factor":1.75,"tooltip":"Sample tooltip", "price":1}},{"type":4,"data":{"required":false,"scaling_factor":1.2,"char_limit":50,"multi_line":true}},{"type":3,"data":{"required":false,"price":0.7,"display_name":false}}]'
);
-- Select from the modified table
SELECT * FROM ModifiedTable;
--drop table ModifiedTable
OPENJSON
您需要使用对和/或的调用来查找路径JSON_VALUE
。然后你可以使用
JSON_MODIFY
来改变对象。请注意,这仅在您需要每行更改一个属性时才有效。数据库<>小提琴
如果您需要更改每行的多个值,那么您需要重建整个 JSON。
不幸的是,SQL Server 不支持
JSON_AGG
,因此您需要改用STRING_AGG
。数据库<>小提琴