Повторно использовать T-SQL FOR JSON подзапрос
Вот простой пример вложенного запроса FOR JSON:
select
u.Id,
u.Name,
(select ue.Email
from UserEmails ue
where ue.UserId = u.Id
for json path
)
from
Users u
for json path
Есть ли способ повторно использовать UserEmails
подзапрос? Например, в функции?
Подобно:
select
u.Id,
u.Name,
u.Email,
dbo.GetUserEmailsJSON(u.Id)
from
Users u
for json path
Я также хотел бы иметь возможность позвонить dbo.GetUserEmailsJSON()
самостоятельно и вернуть данные в формате JSON.
1 ответ
Разобрался... Следующие работы
Функция:
create function GetUserEmailsJSON
(
@UserId int
)
returns nvarchar(max)
as
begin
declare @result nvarchar(max)
set @result = (
select *
from UserEmails ue
where ue.UserId = @UserId
for json path, include_null_values
)
return @result;
end
И тогда ваш запрос будет выглядеть так:
SELECT u.*
,json_query(dbo.GetUserEmailsJSON(u.Id)) 'Emails'
FROM Users u
for json path, include_null_values
Единственное, что мне не нравится в этом, так это вызов скалярной функции в качестве подзапроса - это может быть очень утомительно. У кого-нибудь есть другие предложения?
Теперь мне нужно выяснить, как вызвать эту функцию из EF Core и вернуть JSON в объект... Есть предложения?