0

我正在尝试以特定方式从我们的 SQL 服务器检索数据,基本上我有一个列,它有一个分隔符',',需要使用 FOR JSON PATH 像数组一样转换

我试过使用 FOR XML PATH 和 FOR JSON PATH,但我不知道如何克服这个查询。

除此之外,我还有其他解决方法,使用 Entity Framework + LINQ 进行映射,我需要修复或了解在 SQL SERVER 中是否可行。

这是我没有 FOR JSON 的简单数据:

在此处输入图像描述

这就是我正在做的事情:

select * from #templateData FOR JSON PATH

-- result
[
    {
        "id": 1,
        "name": "Full Stack Engineer",
        "description": ".net developer with 20 year of experience,Scrum master,Hold bachelor degree "
    },
    {
        "id": 2,
        "name": "Web Developer",
        "description": "web dev"
    },
    {
        "id": 3,
        "name": "Full Stack Engineer",
        "description": "tested"
    }
]

这就是我所期待的(见专栏描述)

[
    {
        "id": 1,
        "name": "Full Stack Engineer",
        "description": [
                         {".net developer with 20 year of experience"},
                         {"Scrum master"},
                         {"Hold a bachelor degree"},
                       ],
    },
    {
        "id": 2,
        "name": "Web Developer",
        "description": "web dev"
    },
    {
        "id": 3,
        "name": "Full Stack Engineer",
        "description": "tested"
    }
]

但是,我尝试使用和使用STRING_SPLIT一起FOR JSON PATH使用CROSS_APPLY,但没有成功。

4

1 回答 1

0

抱歉,我之前发布了不正确的评论并将其删除。我想你想要这样的东西。

[编辑]:现在它使用框架拆分器。

declare @json           nvarchar(max)=N'[
    {
        "id": 1,
        "name": "Full Stack Engineer",
        "description": ".net developer with 20 year of experience,Scrum master,Hold bachelor degree "
    },
    {
        "id": 2,
        "name": "Web Developer",
        "description": "web dev"
    },
    {
        "id": 3,
        "name": "Full Stack Engineer",
        "description": "tested"
    }
]'

;with j_cte(id, [name], [description]) as (
    select * from openjson(@json) with (id               int,
                                        [name]           nvarchar(200),
                                        [description]    nvarchar(4000)))
select id, [name],
    (select [value] from string_split(j.[description], ',') for json path) [description]
from j_cte j for json path;

产生输出:

[
  {
    "id": 1,
    "name": "Full Stack Engineer",
    "description": [
      {
        "Item": ".net developer with 20 year of experience"
      },
      {
        "Item": "Scrum master"
      },
      {
        "Item": "Hold bachelor degree "
      }
    ]
  },
  {
    "id": 2,
    "name": "Web Developer",
    "description": [
      {
        "Item": "web dev"
      }
    ]
  },
  {
    "id": 3,
    "name": "Full Stack Engineer",
    "description": [
      {
        "Item": "tested"
      }
    ]
  }
]
于 2020-08-14T17:20:54.900 回答