Как написать запрос SQL для создания пустых json объектов внутри json объекта - PullRequest
1 голос
/ 28 апреля 2020

Мне нужен запрос SQL, чтобы получить объект ниже JSON. Я пробовал с FOR JSON PATH. До модели объекта я могу получить его. Но внутри JSON объекты не приходят.

{
  "Model": [
    {
       "ModelName": "Registration",
       "Version": 1,   
       "Student": [
          {
            "StudentID": null,
            "StudentName": null,          
            "Work": [
              {
                "WorkID": null,
                "WorkNameName": null,             
                "Note": [
                  {
                    "NoteID": null,
                    "Comments": null,                 
                    "Visible": [
                       {
                         "IsVisible": null
                       }
                    ]
                  }
                ]
              }
           ]
         }
      ]
    }
  ]
}

1 Ответ

0 голосов
/ 05 мая 2020

Определение переменной nvarchar(max) (которая является действительным JSON объектом) всегда является опцией, но вы можете попытаться отформатировать результаты запроса из оператора SELECT как JSON, используя FOR JSON AUTO. В этом случае структура вывода JSON зависит от структуры оператора SELECT.

Оператор:

DECLARE @ScriptData nvarchar(max) 
SET @ScriptData = 
(
   SELECT 
      Model.ModelName, Model.Version, 
      Student.StudentID, Student.StudentName,
      Work.WorkID, Work.WorkNameName,
      Note.NoteID, Note.Comments,
      Visible.IsVisible
   FROM (VALUES ('Registration', 1)) Model (ModelName, Version)   
   CROSS APPLY (VALUES (NULL, NULL)) Student (StudentID, StudentName)
   CROSS APPLY (VALUES (NULL, NULL)) Work (WorkID, WorkNameName)
   CROSS APPLY (VALUES (NULL, NULL)) Note (NoteID, Comments)
   CROSS APPLY (VALUES (NULL)) Visible (IsVisible)
   FOR JSON AUTO, ROOT('Model'), INCLUDE_NULL_VALUES
)

Результат:

{
  "Model":[
    {
      "ModelName":"Registration",
      "Version":1,
      "Student":[
        {
          "StudentID":null,
          "StudentName":null,
          "Work":[
            {
              "WorkID":null,
              "WorkNameName":null,
              "Note":[
                {
                  "NoteID":null,
                  "Comments":null,
                  "Visible":[
                    {
                      "IsVisible":null
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}
...