Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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 使用通配符的OpenJson_Sql_Json_Sql Server_Sql Server Json - Fatal编程技术网

Sql 使用通配符的OpenJson

Sql 使用通配符的OpenJson,sql,json,sql-server,sql-server-json,Sql,Json,Sql Server,Sql Server Json,我有一个SQL查询,使用OPENJSON将JSON数据导入到表中。我的问题是我需要的数据是嵌套的。如何在JSON路径中使用通配符来获取所需内容 SELECT @Set = BulkColumn FROM OPENROWSET (BULK 'Sets.json', DATA_SOURCE = 'MyAzureJson', SINGLE_BLOB) JSON; INSERT INTO [Sets] SELECT [name] FROM OPENJSON(@Set) WITH( [name

我有一个SQL查询,使用OPENJSON将JSON数据导入到表中。我的问题是我需要的数据是嵌套的。如何在JSON路径中使用通配符来获取所需内容

SELECT @Set = 
BulkColumn FROM OPENROWSET
(BULK 'Sets.json', DATA_SOURCE = 'MyAzureJson', SINGLE_BLOB) JSON;

INSERT INTO [Sets]
SELECT [name]
FROM OPENJSON(@Set)
WITH(
    [name]      nvarchar(50)    '$.*.name'
)
我的json文件设置如下

{
    "testOne" : {
        name: "nameOne"
    },
    "testTwo : {
        name: "nameTwo"
    }
}
我所犯的每一个错误

JSON路径格式不正确。在位置2处发现意外字符“*”


我试过了。*[]而且据我所知,OPENJSON中不支持通配符。 相反,您可以通过忽略搜索中的字段名来解决问题。为此使用
JSON\u值

INSERT INTO [Sets]
SELECT
    JSON_VALUE([value], '$.name')
FROM 
    OPENJSON(@Set)
说明:如果您没有在
WITH
子句中定义OPENJSON的变量,而是从OPENJSON(@Set)
查询中执行一个简单的
SELECT*,您将得到一个包含键、值和类型列的结果(参见下面的输出示例)。由于
包含有问题的字段名,您可以忽略该部分,只需查看数据的

[key]      [value]                [type]
-----      -------                ------
testOne    { name: "nameOne" }    5
testTwo    { name: "nameTwo" }    5