Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何从包含JSON数组的列中检索特定的JSON值_Sql_Sql Server - Fatal编程技术网

Sql 如何从包含JSON数组的列中检索特定的JSON值

Sql 如何从包含JSON数组的列中检索特定的JSON值,sql,sql-server,Sql,Sql Server,我在SQL Server表中有一个JSON数组: [ { "FieldName": "DateCreated", "FieldValue": "10/22/2020" }, { "FieldName": "IsMember", "FieldValue": "fa

我在SQL Server表中有一个JSON数组:

[
    {
        "FieldName": "DateCreated",
        "FieldValue": "10/22/2020"
    },
    {
        "FieldName": "IsMember",
        "FieldValue": "false"
    },
    {
        "FieldName": "EntityId",
        "FieldValue": "ABC123"
    }
]
我只想获取
EntityId
对象的
FieldValue
,因此输出应该仅为
ABC123

我有这个疑问

SELECT JSON_VALUE(JsonColumnData, '$[2].FieldValue') AS EntityId
FROM MyTable
这将返回
EntityId
值,但问题是我不能保证
EntityId
始终位于JSON数组的相同位置

是否可以让select返回EntityId,而不管它在JSON数组中的位置如何?

您可以使用它来查询数据并只过滤包含EntityId的行

创建表dbo.MyTable(
JsonColumnData nvarchar(最大值)
);
插入dbo.MyTable(JsonColumnData)值(N'[
{
“FieldName”:“DateCreated”,
“FieldValue”:“2020年10月22日”
},
{
“字段名”:“IsMember”,
“FieldValue”:“false”
},
{
“字段名”:“EntityId”,
“字段值”:“ABC123”
}
]');
选择FieldValue作为EntityId
从dbo.MyTable
将openjson(JsonColumnData)与(
字段名nvarchar(11),
字段值nvarchar(11)
)
其中FieldName=N'EntityId';
这就产生了

EntityId
---------
ABC123