0

У меня есть вложенный файл JSON, который я пытаюсь использовать в качестве источника данных для отчетов. Я «сплющиваю» структуру, но не уверен, как оценивать данные братьев и сестер.SQL-сервер, получающий данные в вложенной структуре данных JSON

Образца данные:

{ 
"Cources": [{ 
     "ID": 1, 
     "Name": "MAC100", 
     "Room": 100, 
     "TAID": 123, 
     "StudentsIDs": [ 
      1, 2 
     ] 
    } 
], 

"TAs": [{ 
    "ID": 123, 
    "Name": "Joe", 
    "LName": "Smith" 
}], 

"Students": [{ 
    "ID": 1, 
    "LName": "Clark" 
}, { 
    "ID": 2, 
    "LName": "Peterson" 
}] 
} 

SQL Server: глотаю файл данных и сглаживать данные для отчета:

SELECT Cource.ID, 
Cource.Name as CName, 
Cource.Room as CRoom, 
CourceStudents.LName 

FROM OPENROWSET (BULK 'C:\Data\file.json', SINGLE_CLOB) as jsonfile 

CROSS APPLY OPENJSON(BulkColumn,'$[0]') WITH( 

    Cources nvarchar(max) AS JSON, 
    TAs nvarchar(max) AS JSON, 
    Students nvarchar(max) AS JSON 

    ) AS [SampleData] 

CROSS APPLY OPENJSON(Cources) WITH (
    Room integer, 
    Name nvarchar(max), 
    StudentsIDs nvarchar(max) AS JSON 
) as [Cources] 

CROSS APPLY OPENJSON(Students) WITH ( 
    ID integer, 
    LName nvarchar(max), 
) as [Students] 

CROSS APPLY OPENJSON(StudentsIDs) WITH ( 
**//??? how to get full data for the student from "Students" joining by the student ID ?** 
) as [CourceStudents] 

Я споткнулся о том, как получить все данные студента из "Студентов" в «StudentIDs «присоединение по идентификатору.

+0

Что вы хотите, чтобы вывод выглядеть? Кроме того, имея строку чисел, подобную той, для которой студенты находятся в том, что Cource не является хорошим дизайном db. – dfundako

+0

Эти данные не хранятся в БД. Я использую SQL Server исключительно для генерации отчета из потока данных о жизни. Я пытаюсь сгладить структуру JSON, чтобы она напоминала строки таблицы со всей информацией, например: Cources.ID, Students.ID, Students.LName – kaplievabell

ответ

0

Я создал временную таблицу, импортированные JSON данных в нем, что allowerd меня есть ИНЕКЕ:

DROP TABLE IF EXISTS tempdb.dbo.#temp; 
CREATE TABLE #temp (
InfoJson nvarchar(max) 
) 

ALTER TABLE #temp 
ADD CONSTRAINT [Content should be formatted as JSON] 
CHECK (ISJSON(InfoJson)> 0) 

Insert INTO #temp (InfoJson) 
SELECT * 
FROM OPENROWSET (BULK 'C:\Data\file.json', SINGLE_CLOB) as j; 

SELECT Cource.ID, 
Cource.Name as CName, 
Cource.Room as CRoom, 
CourceStudents.LName 
FROM #temp 

CROSS APPLY OPENJSON(InfoJson,'$') WITH( 
    Cources nvarchar(max) AS JSON, 
    TAs nvarchar(max) AS JSON, 
    Students nvarchar(max) AS JSON 
    ) AS [SampleData] 

CROSS APPLY OPENJSON(Cources) WITH (
    Room integer, 
    Name nvarchar(max), 
    StudentsIDs nvarchar(max) AS JSON 
) as [Cources] 

CROSS APPLY OPENJSON(StudentsIDs) WITH (
    value nvarchar(100) '$' 
) as [StudentsIDs] 

CROSS APPLY OPENJSON(Students) WITH ( 
    ID integer, 
    LName nvarchar(max), 
) as [Students] 

WHERE StudentsIDs.value=Students.ID