Я пытаюсь проанализировать данные JSON из таблицы в SQL Server 2017. У меня есть представление, которое возвращает эти данные:
| Debrief Name | Version | Answer Question | Answer Options |
+-------------------+-----------+--------------------------+--------------------------------------------------------------------------------------------------------------------------+
| Observer Report | 7 | Division: | {"Options":[{"Display":"Domestic","Value":"Domestic"},{"Display":"International","Value":"International"}]} |
| Observer Report | 7 | Are you on reserve? | {"Options":[{"Display":"Yes - Long Call Line","Value":"Yes"},{"Display":"No","Value":"No"}]} |
| Observer Report | 11 | Crew Position: | {"Options":[{"Display":"CA","Value":"CA"},{"Display":"RC","Value":"RC"},{"Display":"FO","Value":"FO"}]} |
| Observer Report | 11 | Domicile: | {"VisibleLines":2,"Options":[{"Display":"BOS","Value":"BOS"},{"Display":"CLT","Value":"CLT"}]} |
| Training Debrief | 12 | TRAINING CREW POSITION | {"VisibleLines":2,"Options":[{"Display":"CA","Value":"CA"},{"Display":"FO","Value":"FO"}]} |
| Training Debrief | 12 | AIRCRAFT | {"VisibleLines":2,"Options":[{"Display":"777","Value":"777"},{"Display":"767","Value":"767"}]} |
| Security Debrief | 9 | Aircraft Type | {"Options":[{"Display":"MD-80","Value":"MD-80"},{"Display":"777","Value":"777"},{"Display":"767/757","Value":"767/757"}]}|
| News Digest | 2 | Do you read Digest? | {"Options":[{"Display":"Yes","Value":"Yes"},{"Display":"No","Value":"No"}]} |
В столбце Debrief Name
может быть несколько записей для одного и того же имени иVersion
.Также есть несколько версий для каждого отчета.И для каждой комбинации имени и версии отчета есть набор Answer Questions
и связанный Answer Options
.Теперь столбец Answer Options
содержит запись JSON, которую мне нужно проанализировать.
Итак, мой начальный запрос выглядит примерно так:
SELECT *
FROM [dbo].<MY VIEW>
WHERE [Debrief Name] = 'Observer Report' AND Version = 11
, который будет возвращать данные ниже:
| Debrief Name | Version | Answer Question | Answer Options |
+---------------------+--------------+-----------------------+-----------------------------------------------------------------------------------------------------------------+
| Observer Report | 11 | Crew Position: | {"Options":[{"Display":"CA","Value":"CA"},{"Display":"RC","Value":"RC"}]} |
| Observer Report | 11 | Domicile: | {"VisibleLines":2,"Options":[{"Display":"BOS","Value":"BOS"},{"Display":"CLT","Value":"CLT"}]} |
| Observer Report | 11 | Fleet: | {"Options":[{"Display":"330","Value":"330"},{"Display":"320","Value":"320"}]} |
| Observer Report | 11 | Division: | {"Options":[{"Display":"Domestic","Value":"Domestic"},{"Display":"International","Value":"International"}]} |
| Observer Report | 11 | Are you on reserve? | {"Options":[{"Display":"Yes - Long Call Line","Value":"Yes - Long Call Line"},{"Display":"No","Value":"No"}]} |
Теперь из этого возвращенного результата для каждого Answer Question
Мне нужно проанализировать связанные Answer Options
данные JSON и извлечь поле Значение для всех атрибутов отображения.Так, например, строка JSON в Answer Options
для вопроса "Вы на резерве?"выглядит так:
"Options":[
{
"Display":"330",
"Value":"330",
"Selected":false
},
{
"Display":"320",
"Value":"320",
"Selected":false
},
{
"Display":"S80",
"Value":"S80",
"Selected":false
}
]
Поэтому мне нужно извлечь поля «Значение» и вернуть что-то вроде массива со значениями {330, 320, 195}.
В заключение я хочу построить запрос, в котором, когда я предоставляю имя и краткое имя версии, он возвращает мне Answer Question
и все значения Answer Option
.
Я думаю об использовании хранимой процедуры, как показано ниже:
CREATE PROCEDURE myProc
@DebriefName NVARCHAR(255),
@Version INT
AS
SELECT *
FROM [dbo].[myView]
WHERE [Debrief Name] = @DebriefName
AND Version = @Version
GO;
И затем есть другая хранимая процедура, которая будет захватывать этот результат из myProc
и затем выполнять анализ JSON:
CREATE PROCEDURE parseJSON
@DebriefName NVARCHAR(255),
@Version INT
AS
EXEC myProc @DebriefName, @Version; //Need to capture the result data in a temp table or something
// Parse the JSON data for each question item in temp table
GO;
Я не специалист по SQL, поэтому не уверен, как это сделать.Я читал об анализе Json в SQL здесь и чувствую, что могу использовать это, но не уверен, как это сделать в моем контексте.