SQL Server查询JSON数组
问题描述:
我想在下面的结构中查询SQL Server 2016中的某些JSON,我想查找'key'具有特定值的所有记录。任何帮助如何做到这一点?SQL Server查询JSON数组
{
"nodeDataArray": [{
"key": "5B502176-E51A-48B7-B8F0-350984CFBCF2",
"category": "IFM"
}, {
"key": "1260263E-6111-47B2-9776-FE9BA5C90DCB",
"category": "IFM"
}, {
"key": "8AE454D3-944E-47BE-8CA9-049318DE213B",
"category": "IFM"
}, {
"key": "96B20972-F88C-44BA-84AA-C1F45BE5C7D5",
"category": "IFM"
}
}]
}
感谢,
马特
答
DECLARE @json NVARCHAR(MAX)
SET @json = N'{
"nodeDataArray": [
{
"key": "5B502176-E51A-48B7-B8F0-350984CFBCF2",
"category": "IFM"
},
{
"key": "1260263E-6111-47B2-9776-FE9BA5C90DCB",
"category": "IFM"
},
{
"key": "8AE454D3-944E-47BE-8CA9-049318DE213B",
"category": "IFM"
},
{
"key": "96B20972-F88C-44BA-84AA-C1F45BE5C7D5",
"category": "IFM"
}
]
}'
SELECT
JSON_VALUE(nda.value, '$.key') AS [key],
JSON_VALUE(nda.value, '$.category') AS [category]
FROM OPENJSON(@json, '$.nodeDataArray') AS nda
WHERE JSON_VALUE(nda.value, '$.key') = '1260263E-6111-47B2-9776-FE9BA5C90DCB'
答
如果你是在SQL 2016年,看看这篇文章: JSON Data (SQL Server)。
如果您不在SQL 2016上,则不支持本机JSON。你最好的选择是用.NET编写一些东西,并从SQL SP或函数中调用它(谷歌可以帮你开始使用它)。
+0
我在SQL Server 2016上。问题的关键在于直接查询数据库以查找包含特定键值的所有记录(其中包含数百个包含JSON数据的记录)。这个语法对我来说不是很清楚。我可以编写一个.Net函数来做到这一点,但想知道我是否可以简单地发送一个查询来获取我的信息... – mnt
你使用什么SQL Server版本?查询是否保证在此版本上运行? –
如果您发布的是代码或数据样本,请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码样本”按钮(“{}”)以精确格式化并语法突出显示它! –
SQL Server Version 2016 – mnt