这是我的疑问:

SELECT 
    a.Id, a.Title,
    (SELECT m.Id, m.Name, m.MobileNo
     FROM [msm].[MsmMember] AS m
     WHERE m.Id = a.MemberId 
       AND m.OrganizationId = @OrganizationId
    FOR JSON PATH, WITHOUT_ARRAY_WRAPPER) AS Member
FROM 
    msm.MsmArticleSubmission a 
WHERE
    a.OrganizationId = @OrganizationId
    AND a.Id = @Id
FOR JSON PATH

以下是生成的输出:

[
  {
    "Id": "A4C6B579-5D0C-4807-9537-53C6B1E8E6BA",
    "Title": "Test Data",
    "Member": "{\"Id\":\"79F87A71-332A-43CB-A944-E8C50C00CFF7\",\"Name\":\"Asma Husain Noora\",\"MobileNo\":\"00000000\"}"
  }
]

这里的成员不是有效的JSON格式,因此,当我try 从C#反序列化时,Member对象抛出异常,因为无效的JSON格式.我想不出任何解决办法.如果我将"Members"设置为一个数组,那么它就可以工作,但我只需要一个关联对象.

技术堆栈:ASP.NET CORE 8.0、SQL Server 2019

推荐答案

试试这个:

SELECT 
    a.Id, a.Title,
    JSON_QUERY((SELECT m.Id, m.Name, m.MobileNo
     FROM [msm].[MsmMember] AS m
     WHERE m.Id = a.MemberId 
       AND m.OrganizationId = @OrganizationId
    FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)) AS Member
FROM 
    msm.MsmArticleSubmission a 
WHERE
    a.OrganizationId = @OrganizationId
    AND a.Id = @Id
FOR JSON PATH

Sql相关问答推荐

判断时间之间是否有时间

postgresql插入json不工作

使用来自不同深度的嵌套组的值执行计算的干净方法?

在Golang中管理数据库事务的简洁方法

在SQL中使用类别值将行转置为列

你能过滤一个列表只返回多个结果吗?

带上最后日期(结果)

需要从键-值对数据中提取值

更正用于判断错误组合的SQL

存储过程太慢

Snowflake 中的分层数据

在 SQL Server 中查找重复项

计算组内多个日期间隔go 年的累计天数

在自引用表中使用分组和计数的SQL查询语句

for each 客户查找每个类别的最新评分

检索具有相同位置的最小和最大store 数量

函数调用作为插入值语句中的参数

超过100名员工的连续行

在时态表和非时态表之间使用 EXCEPT 的 SQL 子查询给出表达式错误数

如何在 Trino/Presto 中过滤掉 map 中的某些键?