यहां दो विकल्प हैं। अस्वीकरण:मैं एसक्यूएल सर्वर 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 )