关于SQL Server 2017中使用json传参时解析遇到的多层解析问题

Posted lonelyxmas

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于SQL Server 2017中使用json传参时解析遇到的多层解析问题相关的知识,希望对你有一定的参考价值。

原文:关于SQL Server 2017中使用json传参时解析遇到的多层解析问题

开发新的系统,DB部分使用了SQL Server从2016版开始自带的Json解析方式。

用了快半年,在个人项目,以及公司部分项目上使用了,暂时还没遇到大的问题,和性能问题。

今天在解析Json的多级参数遇到了点小问题,在此记录一下:

传参内容如下:

1 declare @json varchar(max)=N‘{"Customer":36,"Positions":[{"ID":0,"Quantity":180000,"Files":[180,177,175,172,170,169,167,164,161,162,159,158,153,152]}]}‘;

想解析出Positions里面的Files,但是一直报错,或者NULL。

查询文档,发现这种解析需要制定的字段类型,并准成json才行。

解析的SQL Script如下:

1 select    ID, Quantity, FileID=f.value
2 from    openjson (@json, $.Positions)
3 with (
4     ID int, 
5     Quantity int,
6     Files nvarchar(max) $.Files as json
7 ) x
8 cross    apply openjson(x.Files, $) f

*注:其中第6行的写法是固定的:字段类型及后面的。

 

以上是关于关于SQL Server 2017中使用json传参时解析遇到的多层解析问题的主要内容,如果未能解决你的问题,请参考以下文章

VBA 将日期参数传递给 SQL Server 存储过程

使用 C# 和 OPENJSON 将 JSON 插入 SQL Server 2016

使用 Sql Server 2016 的 OPENJSON 函数从 Json 文档中的多个数组元素中选择结果

将 Access 表日期值作为参数传递给 SQL Server 存储过程

在 SQL Server 2016 中获取 json 数组的长度

在 SQL Server 2008R2 中解析 Json 并计算值