参照微软提供的例子:解析JSON在SQL Server
DECLARE @json NVARCHAR(MAX)
SET @json =
N'[
{ "id" : 2,"info": { "name": "John", "surname": "Smith" }, "age": 25 },
{ "id" : 5,"info": { "name": "Jane", "surname": "Smith" }, "dob": "2005-11-04T12:00:00" }
]'
SELECT *
FROM OPENJSON(@json)
WITH (id int 'strict $.id',
firstName nvarchar(50) '$.info.name', lastName nvarchar(50) '$.info.surname',
age int, dateOfBirth datetime2 '$.dob')
当JSON数据有一个数组里面,例如:
DECLARE @json NVARCHAR(MAX)
SET @json =
N'[
{ "id" : 2,"info": { "name": "John", "surname": "Smith" },
"Phones": ["123","345","678"] // like here
}
]'
有什么办法加入阵列解析后的数据得到的东西是这样的:
Id First Name Last Name Phone
2 John Smith 123
2 John Smith 345
2 John Smith 678
伟大的解决方案,我被困在这个'Phones NVARCHAR(MAX)AS JSON',所以实现它像value子句 – TheGameiswar
@TheGameiswar:如果值的数量严格限制(和/或已知)明确地将它们从数组可能会比第二个'OPENJSON'快。但是我没有经验JSON解析的时间,所以现在不需要优化。 :-) –
是的,你是对的,只是看到执行计划,原Json的成本为0,json低于outer apply的成本为20 – TheGameiswar