首页 > 解决方案 > 将 mssql openjson 数组类型值结果转换为表?

问题描述

我的 Microsoft (MS) SQL Server 查询中有一个 json 对象。这个 JSON 对象确实有一个值,它是一个字符串数组。

--this variable holds my JSON object with a value of array type. 
declare @json nvarchar(max) = N'{
                    "value": [
                        "tapiwanashe",
                        "robert",
                        "emmerson",
                        "ruwimbo",
                        "takudzwa",
                        "munyaradzi"
                    ]
                }'

我的目标是使用支持的 MS SQL Server JSON 函数编写一个 SQL 查询,该函数生成一个表,其中包含上面 JSON 对象值数组中的一列和六行值。

我试图运行 JSON_QUERY 和 OPENJSON 函数。但是,这两个函数都返回一个字符串数组作为输出。我想要一个一列六行的结果。

select JSON_QUERY(@json, '$.value')
select [value] from OPENJSON(@json)

我得到的结果是:

value
---------------
[
   "tapiwanashe",
   "robert",
   "emmerson",
   "ruwimbo",
   "takudzwa",
   "munyaradzi"
]

但是,我期望得到的结果如下所示:

value
-----------
tapiwanashe
robert
emmerson
ruwimbo
takudzwa
munyaradzi

结果必须保留值出现在值数组中的顺序。

标签: sqljsonsql-servertsql

解决方案


像这样:

declare @json nvarchar(max) = N'{
                    "value": [
                        "tapiwanashe",
                        "robert",
                        "emmerson",
                        "ruwimbo",
                        "takudzwa",
                        "munyaradzi"
                    ]
                }'

select value 
from openjson(@json,'$.value')
order by [key]

输出

value
----------
tapiwanashe
robert
emmerson
ruwimbo
takudzwa
munyaradzi

推荐阅读