小编onj*_*nji的帖子

将OPENJSON应用于单个列

我有一个带有两个属性列的产品表和一个json列.我希望能够分隔json列并插入保留属性的额外行.示例数据如下所示:

ID          Name          Attributes
1           Nikon        {"4e7a":["jpg","bmp","nef"],"604e":["en"]}
2           Canon        {"4e7a":["jpg","bmp"],"604e":["en","jp","de"]}
3           Olympus      {"902c":["yes"], "4e7a":["jpg","bmp"]}
Run Code Online (Sandbox Code Playgroud)

我知道OPENJSON可以将JSON对象转换为行,将键值转换为单元格但是如何将它应用于包含JSON数据的单个列?

我的目标是获得如下输出:

ID          Name          key        value
1           Nikon         902c       NULL
1           Nikon         4e7a       ["jpg","bmp","nef"]
1           Nikon         604e       ["en"]
2           Canon         902c       NULL
2           Canon         4e7a       ["jpg","bmp"]
2           Canon         604e       ["en","jp","de"]
3           Olympus       902c       ["yes"]
3           Olympus       4e7a       ["jpg","bmp"]
3           Olympus       604e       NULL
Run Code Online (Sandbox Code Playgroud)

有没有办法可以查询这个产品表?或者有没有办法重现我的目标数据集?

SELECT
  ID,
  Name,
  OPENJSON(Attributes)
FROM products
Run Code Online (Sandbox Code Playgroud)

谢谢!

t-sql sql-server json

6
推荐指数
1
解决办法
6160
查看次数

替换/重命名/修改 SQL Server 中的 JSON 密钥

我有一个名为“属性”的列,其中包含一个 JSON blob。该 blob 在一行中可以有单个或多个键:值。

以下是 3 行简化的示例数据:

{"68c4":["yes"],  "c8ew":["0","1"],  "p6i4":["London","Frankfurt","Tokyo"]}
{"472h":["USD"],  "c8ew":["-1","9"],  "p6i4":["New York"]}
{"472h":["EUR","JPY"]}
Run Code Online (Sandbox Code Playgroud)

密钥是 UUID,我需要用人类可读的组件替换它们

我知道我可以写这样的东西:

SELECT JSON_MODIFY(attributes, '$."p6i4"', 'City') AS modified
Run Code Online (Sandbox Code Playgroud)

但这改变了价值。我的问题是我需要更改密钥。有谁知道如何做到这一点?

sql-server json

4
推荐指数
1
解决办法
6526
查看次数

标签 统计

json ×2

sql-server ×2

t-sql ×1