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