【问题标题】:How to read a complex json array with SQL Server如何使用 SQL Server 读取复杂的 json 数组
【发布时间】:2021-12-13 16:16:09
【问题描述】:

这是我的查询:

SELECT
    JSON_QUERY(MyStringColumnWithJson, '$.Images') AS images
FROM MyTable

它返回一个带有如下所示 JSON 数据的字段:

"{ 
   "Images":
   [
     {"Name":"test1.jpeg","Description":"originalName1.jpeg"}, 
     {"Name":"test2.jpeg","Description":"originalName2.jpeg"}, 
     {"Name":"test3.jpeg","Description":"originalName3.jpeg"}
   ]
}"

如何将图像结果逐行读取到临时表结构中?

【问题讨论】:

  • 你的我不能支持足够的:-)

标签: json sql-server sql-server-json


【解决方案1】:

使用OPENJSON,它返回一个数据集,不是 JSON_VALUE,它返回一个标量值。例如:

DECLARE @JSON nvarchar(MAX) = N'{ 
"Images":
   [
     {"Name":"test1.jpeg","Description":"originalName1.jpeg"}, 
     {"Name":"test2.jpeg","Description":"originalName2.jpeg"}, 
     {"Name":"test3.jpeg","Description":"originalName3.jpeg"}
   ]
}';

SELECT *
FROM OPENJSON(@JSON, '$.Images')
     WITH (Name nvarchar(128),
           Description nvarchar(128))OJ;

SELECT I.[Name],
       I.Description
FROM MyTable MT
     CROSS APPLY OPENJSON(MT.YourJsonColumn, '$.Images')
                 WITH (Name nvarchar(128),
                       Description nvarchar(128)) I;

【讨论】:

  • 这就像我发现的所有样本......它们基于一个包含 json 的变量......但我的 json 在一个 sql 字段中!你会怎么做?
  • 只需将@JSON 替换为您的列名@HelloWorld(显然是在FROM 中已引用的表)。
  • OJ到底是什么?
  • 别名,@HelloWorld ... O 代表 Open,J 代表 JSON。如果您愿意,可以使用其他东西。例如I 代表Images
  • 对不起,我不明白...它真的很混乱。我现在有 2 个选择语句吗?能否请您使用我的原始代码并修改它,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多