2016-12-29 1 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) 

내가 예를 들어, "JEJE"모든 열 "A"를 업데이트 할 필요가 작동하지 않습니다.

답변

3

여기에는 두 가지 옵션이 있습니다. 면책 조항 : 저는 SQL Server 2016을 통해 JSON에서 전문가가 아니지만 일부 자료를 함께 해킹했습니다.

옵션 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

관련 문제