SQL Server-JSON处理未知的第一个元素

SQL Server-JSON处理未知的第一个元素,json,sql-server,Json,Sql Server,我将JSON数据从多个服务源捕获到SQLServer中的一个表中;它在其中排队等待处理。每个数据源都有一个不同的初始元素来标识类型。下面是一个虚构的例子 我可以使用json_值(下面的示例)或json_查询轻松地查询文件内容。我正在努力弄清楚的是,为了开始处理,我需要识别我拥有的文件类型。标识符是下面示例中第一个元素“AddressDetails”的名称。在SQL的json查询中,有没有办法获取第一个元素的名称?或者我需要将其推送到接收数据的服务,并用json数据保存类型吗 declare @t

我将JSON数据从多个服务源捕获到SQLServer中的一个表中;它在其中排队等待处理。每个数据源都有一个不同的初始元素来标识类型。下面是一个虚构的例子

我可以使用json_值(下面的示例)或json_查询轻松地查询文件内容。我正在努力弄清楚的是,为了开始处理,我需要识别我拥有的文件类型。标识符是下面示例中第一个元素“AddressDetails”的名称。在SQL的json查询中,有没有办法获取第一个元素的名称?或者我需要将其推送到接收数据的服务,并用json数据保存类型吗

declare @test table (jsondata nvarchar(max))

insert into @test
select '{
    "AddressDetails": {
        "type": 1,
        "address": {
            "Street1": "A Street",
            "Street2": "",
            "town": "Bristol",
            "county": "Avon",
            "country": "England"
        }
}
} '


select 
json_value(jsondata, '$.AddressDetails."type"'),
json_value(jsondata, '$.AddressDetails.address."Street1"'),
json_value(jsondata, '$.AddressDetails.address."Street2"'),
json_value(jsondata, '$.AddressDetails.address."town"'),
json_value(jsondata, '$.AddressDetails.address."county"'),
json_value(jsondata, '$.AddressDetails.address."country"')
from @test

假设您的结构将保持不变,除了第一个标识符 可以使用以下动态零件:

更新

您将得到以下结果:


让我知道这是否有帮助

谢谢你的帮助;这不完全是我想要的在这种情况下,NameOfIdentifier字段将是我需要的。这将帮助我识别要运行的数据的流程,在本例中,如果查询将返回元素“NameOfIdentifier”的名称作为结果集,这就是您需要的吗?如果是这样的话,那么需要一个小的修改,让我知道,我会根据修改脚本,它应该是你现在需要的,我希望有一个内部命令;但这很好用。非常感谢
    SET NOCOUNT ON
    IF OBJECT_ID ('tempdb..##Test') IS NOT NULL DROP TABLE ##Test
    CREATE TABLE ##TEST (jsondata nvarchar(max))

    DECLARE @Cmd NVARCHAR(MAX)=''

    insert into ##TEST
    select '{
        "NameOfIdentifier": {
            "type": 1,
            "address": {
                "Street1": "A Street",
                "Street2": "",
                "town": "Bristol",
                "county": "Avon",
                "country": "England"
            }
        }
    }'


    SELECT @Cmd+= 'SELECT DISTINCT  '''+[Key]+''' as Identifier FROM ##TEST 
                CROSS APPLY OPENJSON(jsondata ,'''+'$.'+[Key]+''');' 
     FROM ##TEST
     CROSS APPLY  OPENJSON (jsondata )

     EXEC sp_executesql @Cmd
     DROP TABLE ##TEST