У меня есть таблица, в которой я храню данные Json в столбце RelatedObject
.Структура таблицы следующая:
+------+------------+-----------------+----------------------+
| [Id] | [ActionId] | [RelatedObject] | [InitiatedTimeStamp] |
+------+------------+-----------------+----------------------+
Я храню два разных типа объекта Json.Примерно так:
{
"firstName": "FName",
"lastName": "LName",
"emailAddress": "xxx@gmail.com",
"contactPref": {
"lm_contclassne": "on",
"lm_contclassneindustrial": "on",
"lm_contclassneconstruction": "on"
}
}
Второй вид - это подмножество первого.Примерно так:
{
"lm_contclassne": "on",
"lm_contclassneindustrial": "on",
"lm_contclassneconstruction": "on"
}
Теперь проблема заключается в выборе пути Json (в некоторых случаях свойства lm_contclassne
, а для других его contactPref.lm_contclassne
) для запроса.Вот как я это делаю.
SELECT [Id],
[ActionId],
[InitiatedTimeStamp],
JSON_VALUE(RelatedObject, IIF(JSON_QUERY(RelatedObject, '$.contactPref') IS NULL, '$.lm_contclassne', '$.contactPref.lm_contclassne')) lm_contclassne,
JSON_VALUE(RelatedObject, IIF(JSON_QUERY(RelatedObject, '$.contactPref') IS NULL, '$.lm_contclassneindustrial', '$.contactPref.lm_contclassneindustrial')) lm_contclassneindustrial,
JSON_VALUE(RelatedObject, IIF(JSON_QUERY(RelatedObject, '$.contactPref') IS NULL, '$.lm_contclassneconstruction', '$.contactPref.lm_contclassneconstruction')) lm_contclassneconstruction
FROM [SaveStatus]
Работает нормально.
У меня такой вопрос, могу ли я оптимизировать запрос?Вы можете видеть, что я наложил одно и то же условие на все свойства Json.Могу ли я сделать проверку IIF(JSON_QUERY(RelatedObject, '$.contactPref') IS NULL
один раз и использовать результат для остальной части выбора?Любая помощь будет оценена.