Eu tenho uma tabela com uma coluna contendo objetos JSON. Dentro desses objetos, preciso localizar a chave type
com valor 3. Uma vez encontrada, preciso atualizar a chave price
com um novo valor de 99 no Objeto JSON aninhado data
. O preço para os outros tipos deve permanecer inalterado. Eu apreciaria muito qualquer ajuda. Obrigado!
-- 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
Você precisa encontrar o caminho usando chamadas para
OPENJSON
e/ouJSON_VALUE
.Então você pode usar
JSON_MODIFY
para mudar o objeto. Observe que isso só funciona quando você precisa alterar uma propriedade por linha.db<>violino
Se você precisar alterar vários valores por linha, precisará reconstruir todo o JSON.
Infelizmente, o SQL Server não oferece suporte
JSON_AGG
, portanto, você precisa usáSTRING_AGG
-lo.db<>violino