json - 使用 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 中。
我究竟做错了什么?
解决方案
使用给定的示例数据,您必须提供一个数组索引来查询第一个元素(基于 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'