2016-12-29 10 views
5

я пытаюсь обновить все столбцы со значением с Json_Modify:SQL Server JSON_Modify, как обновить все?

DECLARE @JSON NVARCHAR(MAX) 
SET @JSON = 
N'{ 
"A":1, 
"TMP": [  
    {"A":"VALUE1", "B": "VALUE2", "C": 1}, 
    {"A":"VALUE3", "B": "VALUE4", "C": 2}, 
    {"A":"VALUE5", "B": "VALUE6", "C": 3}]} 
' 

SET @JSON = JSON_MODIFY(@JSON, '$.TMP.A', 'JEJE') 

SELECT * FROM OPENJSON(@JSON, '$.TMP') WITH (A NCHAR(10), B NCHAR(10), C INT) 

мне нужно обновить все столбцы «A» с «Jeje», например, он не работает.

ответ

3

Вот два варианта. Отказ от ответственности: я не являюсь профессионалом в JSON через сервер sql 2016, но я кое-что взломал.

Вариант 1: Вы явно создаете результирующий набор из строки JSON. Почему бы не создать набор результатов, а затем обновить его?

DECLARE @jsontable TABLE (A varchar(50), b varchar(50), c varchar(50)) 
DECLARE @JSON NVARCHAR(MAX) 

SET @JSON = 
N'{ 
"A":1, 
"TMP": [  
    {"A":"VALUE1", "B": "VALUE2", "C": 1}, 
    {"A":"VALUE3", "B": "VALUE4", "C": 2}, 
    {"A":"VALUE5", "B": "VALUE6", "C": 3}]} 
' 

--SET @JSON = JSON_MODIFY(@JSON, '$.TMP.A', 'JEJE') 
INSERT INTO @jsontable (a,b,c) 
SELECT * FROM OPENJSON(@JSON, '$.TMP') WITH (A NCHAR(10), B NCHAR(10), C INT) 

UPDATE @jsontable 
SET a = 'JEJE' 

SELECT * 
FROM @jsontable 

Вариант 2: вы можете манипулировать компонентами JSON, но вам нужно передать индекс функции.

DECLARE @JSON NVARCHAR(MAX) 
SET @JSON = 
N'{ 
"A":1, 
"TMP": [  
    {"A":"VALUE1", "B": "VALUE2", "C": 1}, 
    {"A":"VALUE3", "B": "VALUE4", "C": 2}, 
    {"A":"VALUE5", "B": "VALUE6", "C": 3}]} 
' 

SET @JSON = JSON_MODIFY(@JSON, '$.TMP[0].A', 'JEJE') 
SET @JSON = JSON_MODIFY(@JSON, '$.TMP[1].A', 'JEJE') 
SET @JSON = JSON_MODIFY(@JSON, '$.TMP[2].A', 'JEJE') 

SELECT * FROM OPENJSON(@JSON, '$.TMP') WITH (A NCHAR(10), B NCHAR(10), C INT) 
+0

Спасибо, я думаю, что я сохраню на столе и после обновления это .. – mdelphi

 Смежные вопросы

  • Нет связанных вопросов^_^