Вставьте новый массив Json в массив json, используя SQL Server 2019 - PullRequest
0 голосов
/ 01 августа 2020

У меня есть этот Json объект. Мне нужно вставить новый массив Json после ID = 1.

{
  "Model": [
    {
      "ModelName": "Test Model",    
      "Object": [
         {
           "ID": 1,
           "Name": "ABC",
           "Task" : [
             {
                TaskID : 10,
                Name: "TaskA"
             },
             {
                TaskID : 11,
                Name: "TaskB"
             }
           ]
         },
         {
           "ID": 3,
           "Name": "XYZ",
           "Task" : [
             {
               TaskID : 13,
               Name: "TaskX"
             },
             {
               TaskID : 14,
               Name: "TaskY"
             }
          ]
        },         
     ]  
  }]}

Мне нужно вставить этот массив Json после ID = 1

        {
           "ID": 2,
           "Name": "PQR",
           "Task" : []
         } 

Ожидаемый результат должен быть. Строка Json находится в таблице. Просто нужно обновить строку Json новым элементом. Как я могу написать запрос SQL для обновления строки Json новым элементом, используя значение индекса массива?

  {
  "Model": [
    {
      "ModelName": "Test Model",    
      "Object": [
         {
           "ID": 1,
           "Name": "ABC",
           "Task" : [
             {
                TaskID : 10,
                Name: "TaskA"
             },
             {
                TaskID : 11,
                Name: "TaskB"
             }
           ]
         },
         {
           "ID": 2,
           "Name": "PQR",
           "Task" : []
         }, 

         {
           "ID": 3,
           "Name": "XYZ",
           "Task" : [
             {
               TaskID : 13,
               Name: "TaskX"
             },
             {
               TaskID : 14,
               Name: "TaskY"
             }
          ]
        },         
     ]  
  }]}

Я пробовал выполнить следующий запрос. Но если я не укажу индекс, он будет вставлен последним. Если я укажу индекс, он не будет вставлен. Как указать индекс?

DECLARE @NewJsonString NVARCHAR(MAX)
 SET @NewJsonString = '{"ID":2, "Name":"PQR", "Task":[]}'

          UPDATE TableA
             SET JsonData = JSON_MODIFY(JsonData, 'append $.Model[0].Object[1]',  JSON_QUERY(@NewJsonString))         
               WHERE TID = 10
...