我安装了SQL Server 2016(v13),尝试解析包含JSON数据的列。列RequestData
中的数据格式如下:
[
{ "Name": "SourceSystem", "Value": "SSValue" },
{ "Name": "SourceSystemId", "Value": "XYZ" }
]
[
{ "Name": "SourceSystemId", "Value": "SSID" },
{ "Name": "SourceSystem", "Value": "SSVALUE2" }
]
我需要获取每行JSON对象的SourceSystem
元素的值,下面是我的Select语句:
SELECT TOP 2
JSON_VALUE(RequestData, '$[0].Value') AS SourceSystem
FROM
RequestDetail
但是,由于JSON元素在列数据中的顺序,为SourceSystem
列返回的值不正确。
SSValue, SSID
请注意,我需要能够解析JSON元素,以便SourceSystem
列具有正确的值,即SSValue和SSValue 2。
我也尝试过JSON_Query
使用一些在线的例子,但没有运气到目前为止。
谢谢大家!
编辑问题在我发布后已被某人修改,因此我添加此内容以作澄清:正如Question中所给出的,每行数据都将有几个“Name”元素,这些Name元素可以是SourceSystem或SourceSystemId。Question显示数据库表列中两行的数据,但是,正如您所看到的,每行中的SourceID和SourceSystemId元素在第一行和第二行之间的顺序不同。我只需要解析每行的SourceSystem元素。
3条答案
按热度按时间jdzmm42g1#
使用openjson,获取列中的所有数据,您可以将其用作任何其他表
| 价值|
| - ------|
| SS值|
| SS 2值|
fiddle
kgsdhlau2#
假设这里需要
OPENJSON
,而不是JSON_VALUE
:smdnsysy3#
当你想使用JSON_VALUE时,只需选择正确的(需要的)值:
输出:
| 源系统|
| - ------|
| SS值|
| SSID|
| XYZ|
| SS 2值|
当您只需要“SourceSystem”中的值时,您可以随时执行以下操作:
输出:
| 源系统|
| - ------|
| SS值|
| XYZ|
参见:DBFIDDLE
编辑:
这将给予:
| x|源系统|源系统ID|
| - ------|- ------|- ------|
| 1个|SS值|XYZ|
| 第二章|SS 2值|SSID|