首页 > 解决方案 > 使用 JSON 值查询 SQL 数据库

问题描述

这是我的 JSON:

[{"Key":"schedulerItemType","Value":"schedule"},{"Key":"scheduleId","Value":"82"},{"Key":"scheduleEventId","Value":"-1"},{"Key":"scheduleTypeId","Value":"2"},{"Key":"scheduleName","Value":"Fixed Schedule"},{"Key":"moduleId","Value":"5"}]

我想通过 FileMetadata 列查询数据库

我试过这个:

  SELECT * FROM FileSystemItems WHERE JSON_VALUE(FileMetadata, '$.Key') = 'scheduleId' and JSON_VALUE(FileMetadata, '$.Value') = '82'

但它不起作用!

我让它只使用一个字典键/值对,但我需要以不同的方式返回数据,所以我现在将它与键和值一起添加到 json 中。

我究竟做错了什么?

标签: jsonsql-server

解决方案


使用给定的示例数据,您必须提供一个数组索引来查询第一个元素(基于 0 的数组索引),例如:

 select *
 from dbo.FileSystemItems
 where json_value(FileMetadata, '$[1].Key') = 'scheduleId'
 and json_value(FileMetadata, '$[1].Value') = '82'

如果scheduleId键可以出现在数组中的任意位置,那么您可以重组查询以使用OPENJSON,例如:

select *
from dbo.FileSystemItems
cross apply openjson(FileMetadata) with (
  [Key] nvarchar(50) N'$.Key',
  Value nvarchar(50) N'$.Value'
) j
where j.[Key] = N'scheduleId'
and j.Value = N'82'

推荐阅读