MS SQL OPENJSON JSON

原文:MS SQL OPENJSON JSON

前段时间,有写过一个小练习《MS SQL读取JSON数据https://www.cnblogs.com/insus/p/10911739.html

晚上为一个网友的问题,尝试获取较深层节点的数据。

根据网友的原始数据,改写一个相对较简单的json原始数据:

DECLARE @json NVARCHAR(MAX) = N‘{"isok":"true",
                                 "stateNumber":"1",
                                 "data":{"ok":true,
                                         "tables":{
                                                    "item":[
                                                            {"A":"E1","B":"E2","C":"E3"},
                                                            {"A":"F1","B":"F2","C":"F3"}
                                                           ],
                                                    "SBU":[
                                                            {"ID":"001","QTY":"2000","amount":"189.03"}
                                                          ]
                                                  }
                                       },
                                 "records":"450",
                                 "pcounts":"150",
                                 "nzsum":"真实采购本页总金额:0.00",
                                 "sum":"本页总金额:2140.79",
                                 "zsum":"条件查询总金额:0.00"
                              }‘

Source Code

例子一:获取第一层数据:

DECLARE @Path NVARCHAR(128) = N‘$‘
DECLARE @SQL NVARCHAR(MAX) = N‘SELECT * FROM OPENJSON(N‘‘‘ + @json + ‘‘‘, N‘‘‘ + @Path + ‘‘‘)‘
EXECUTE sp_executesql @Sql

DECLARE @SQL1 NVARCHAR(MAX) = N‘SELECT * FROM OPENJSON(N‘‘‘ + @json + ‘‘‘, N‘‘‘ + @Path + ‘‘‘)
WITH
(
    [isok] BIT ‘‘$.isok‘‘,
    [stateNumber] INT ‘‘$.stateNumber‘‘,
    [data] NVARCHAR(MAX) AS JSON,
    [records] INT ‘‘$.records‘‘,
    [pcounts] INT ‘‘$.pcounts‘‘,
    [nzsum] NVARCHAR(100) ‘‘$.nzsum‘‘,
    [sum] NVARCHAR(100) ‘‘$.sum‘‘,
    [zsum] NVARCHAR(100) ‘‘$.zsum‘‘

)
‘
EXECUTE sp_executesql @Sql1

Source Code

例子二:获取第二层数据:

DECLARE @Path NVARCHAR(128) = N‘$."data"‘
DECLARE @SQL NVARCHAR(MAX) = N‘SELECT * FROM OPENJSON(N‘‘‘ + @json + ‘‘‘, N‘‘‘ + @Path + ‘‘‘)‘
EXECUTE sp_executesql @Sql

DECLARE @SQL1 NVARCHAR(MAX) = N‘SELECT * FROM OPENJSON(N‘‘‘ + @json + ‘‘‘, N‘‘‘ + @Path + ‘‘‘)
WITH
(
    [ok] BIT ‘‘$.ok‘‘,
    [tables] NVARCHAR(MAX) AS JSON
)
‘
EXECUTE sp_executesql @Sql1

Source Code

例子三:获取第三层数据:

DECLARE @Path NVARCHAR(128) = N‘$."data".tables‘
DECLARE @SQL NVARCHAR(MAX) = N‘SELECT * FROM OPENJSON(N‘‘‘ + @json + ‘‘‘, N‘‘‘ + @Path + ‘‘‘)‘
EXECUTE sp_executesql @Sql

DECLARE @SQL1 NVARCHAR(MAX) = N‘SELECT * FROM OPENJSON(N‘‘‘ + @json + ‘‘‘, N‘‘‘ + @Path + ‘‘‘)
WITH
(
    [item] NVARCHAR(MAX) AS JSON,
    [SBU] NVARCHAR(MAX) AS JSON
)
‘
EXECUTE sp_executesql @Sql1

Source Code

例子四:获取第四层数据:

DECLARE @Path NVARCHAR(128) = N‘$."data"."tables"."item"‘
DECLARE @SQL NVARCHAR(MAX) = N‘SELECT * FROM OPENJSON(N‘‘‘ + @json + ‘‘‘, N‘‘‘ + @Path + ‘‘‘)‘
EXECUTE sp_executesql @Sql

DECLARE @SQL1 NVARCHAR(MAX) = N‘SELECT * FROM OPENJSON(N‘‘‘ + @json + ‘‘‘, N‘‘‘ + @Path + ‘‘‘)
WITH
(
    [A] NVARCHAR(10) ‘‘$.A‘‘,
    [B] NVARCHAR(10) ‘‘$.B‘‘,
    [C] NVARCHAR(10) ‘‘$.C‘‘
)
‘
EXECUTE sp_executesql @Sql1

DECLARE @Path_1 NVARCHAR(128) = N‘$."data"."tables"."SBU"‘

DECLARE @SQL_1 NVARCHAR(MAX) = N‘SELECT * FROM OPENJSON(N‘‘‘ + @json + ‘‘‘, N‘‘‘ + @Path_1 + ‘‘‘)‘
EXECUTE sp_executesql @Sql_1

DECLARE @SQL_2 NVARCHAR(MAX) = N‘SELECT * FROM OPENJSON(N‘‘‘ + @json + ‘‘‘, N‘‘‘ + @Path_1 + ‘‘‘)
WITH
(
    [ID] NVARCHAR(5) ‘‘$.ID‘‘,
    [QTY] DECIMAL(18,2) ‘‘$.QTY‘‘,
    [amount] DECIMAL(18,2) ‘‘$.amount‘‘
)
‘
EXECUTE sp_executesql @Sql_2

Source Code

原文地址:https://www.cnblogs.com/lonelyxmas/p/12204160.html

时间: 2024-08-05 06:42:27

MS SQL OPENJSON JSON的相关文章

MS SQL读取JSON数据

前面有一篇<在SQL中直接把查询结果转换为JSON数据>https://www.cnblogs.com/insus/p/10905566.html,是把table转换为json. 现反过来,当SQL从前端接收过来的数据是JSON的话,需要把它转换为TABLE.在MS SQL Server 2016有一个方法,OPENJSON. DECLARE @json_text NVARCHAR(MAX) SET @json_text = N' { "DB Type": [ {"

MS SQL SERVER: msdb.dbo.MSdatatype_mappings &amp; msdb.dbo.sysdatatypemappings

--SQL转Oracle/DB2的类型对应关系SELECT *FROM msdb.dbo.MSdatatype_mappings; --MS SQL SERVER更详细得显示了ORACLE/DB2各个数据库系统的类型对应SELECT *FROM msdb.dbo.sysdatatypemappings; dbms_name sql_type dest_type dest_prec dest_create_params dest_nullable DB2 bigint DECIMAL 19 3 t

使用 PHP 框架 Yii 访问 MS SQL 的尝试

今天尝试在 Wamp 环境下访问 MS SQL 数据库,有以下心得.使用 PHP 5.3 + pdo_odbc + Yii 1.1 框架,以下两个代码段可以成功. 1.直接使用 PDO 方式,可以获取数据. 1 $sql = "SELECT TOP 10 [NAME],[STCD],[TM],[PA] FROM AT_PA"; 2 $cnx = new PDO("odbc:Driver={SQL Server};Server=10.5.1.47;Database=mydb;&

php5.3.x连接MS SQL server2008

开篇 因为毕设老师需求的原因,虚拟旅游网站要求的数据库必须使用MS SQL server. 我最擅长的web编程语言是PHP,但是在PHP中链接MS SQL server是一件非常麻烦的事,我个人分析造成这种麻烦的原因:是因为使用PHP的一大优点就是免费,然而MS SQL server虽然图形化界面操作起来简单,但是其昂贵的授权费让人望而却步:加之MySQL不俗的性能和强大的社区支持,使得真正企业环境里,使用PHP + MS SQL server的人越来越少. 其实纵观网上的文章,之所以有人选择

不能连接MS Sql Server2008数据库的问题

前几天在计算机上安装了Win8企业版,又安装了MS Sql Server2008,本地开发比较顺畅,可是别的计算机的客户端却不能访问数据库. 先Ping一下,不通,可是它却能ping通别的计算机,可能是设置问题: 1.在运行里输入gpedit.msc,或者进入管理工具,找到计算机设置->windows设置->安全设置->本地策略->用户权限分配->拒绝从网络访问此计算机->删除guest用户,确定.(没有解决问题) 2.打开控制面板,进入管理工具,打开guest账户,G

MS SQL Server分析数据库的I/O性能

系统有的时候响应会明显很慢,有的时候可以是因为访问人数增加导致,有的时候可能因为数据库的磁盘I/O访问次数频繁导致.MS SQL Server提供了一些动态管理视图和函数供我们分析磁盘I/O性能. 1.sys.dm_io_virtual_file_stats SELECT DB_NAME(vfs.database_id) AS database_name , vfs.database_id , vfs.FILE_ID , io_stall_read_ms / NULLIF(num_of_read

MS SQL作业Schedule的限制注意事项

  最近遇到了一个关于MS SQL作业Schedule下有限制的特殊案例,有一个作业,用户要求执行的时间为:9:30,14:30,16:30, 19:00,于是我设置了两个Schedule,其中一个每隔5小时执行一次,时间范围为9:30~  14:30.另外一个作业的Schedule为每隔150分钟执行,时间范围16:30 ~ 19:00, 结果设置后,用户反馈作业并没有在19:00执行,而是18:10执行了,我去检查,使用SSMS客户端(2014)打开检查时,发现设置每隔150分钟后,点击保存

MS SQL 模仿ORACLE的DESC

前言: 在ORACLE数据库的SQL*PLUS里面有个DES(DESCRIBE)命令,它可以返回数据库所存储对象的描述,如下所示 SQL> DESC STUDENT_SCORE   Name Type Nullable Default Comments   ---------------- ---------- -------- ------- --------   STUDENT_NO NUMBER(10) 学号   CHINESE_SCORE NUMBER Y 语文成绩   ENGLISH_

MS SQL 事物日志传送能否跨数据库版本吗?

SQL SERVER的事物日志传送(log shipping)功能,相信很多人都使用过或正在应用,这是MS SQL提供的一个非常强大的功能,一般需要一个主数据库服务器(primary/production database server)和辅助数据库服务器(standby server)来完成这个配置,默认情况下,主数据库和辅助数据库的版本应该是一致的,那么如果这两个数据库版本不一致,会不会有什么问题?还能做log shipping配置吗? 那么数据库版本不一致分两种情况: 1: 类似于MS S