2016-12-29 2 views
5

मैं Json_Modify साथ एक मूल्य के साथ अद्यतन सभी स्तंभों कोशिश कर रहा हूँ:SQL सर्वर 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" के साथ सभी स्तंभों 'ए' को अद्यतन की जरूरत है, यह काम नहीं कर रहा है।

उत्तर

3

यहां दो विकल्प हैं। अस्वीकरण: मैं एसक्यूएल सर्वर 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: आप जेएसओएन घटकों में हेरफेर कर सकते हैं, लेकिन आपको इंडेक्स को फ़ंक्शन में पास करना होगा।

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

संबंधित मुद्दे