在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

实现SQL Server 原生数据从XML生成JSON数据的实例代码怎么编写

101次阅读
没有评论

共计 6940 个字符,预计需要花费 18 分钟才能阅读完成。

行业资讯    
数据库    
实现 SQL Server 原生数据从 XML 生成 JSON 数据的实例代码怎么编写

实现 SQL Server 原生数据从 XML 生成 JSON 数据的实例代码怎么编写,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面丸趣 TV 小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

实现 SQL Server 原生数据从 XML 生成 JSON 数据的实例代码

SQL Server 是关系数据库,查询结果通常都是数据集,但是在一些特殊需求下,我们需要 XML 数据,最近这些年,JSON 作为 WebAPI 常用的交换数据格式,那么数据库如何生成 JSON 数据呢?今天就写了一个 DEMO.

1. 创建表及测试数据

SET NOCOUNT ON IF OBJECT_ID(STATS) IS NOT NULL DROP TABLE STATS IF OBJECT_ID(STATIONS) IS NOT NULL DROP TABLE STATIONS IF OBJECT_ID(OPERATORS) IS NOT NULL DROP TABLE OPERATORS IF OBJECT_ID(REVIEWS) IS NOT NULL DROP TABLE REVIEWS -- Create and populate table with Station CREATE TABLE STATIONS(ID INTEGER PRIMARY KEY, CITY NVARCHAR(20), STATE CHAR(2), LAT_N REAL, LONG_W REAL); INSERT INTO STATIONS VALUES (13,  Phoenix ,  AZ , 33, 112); INSERT INTO STATIONS VALUES (44,  Denver ,  CO , 40, 105); INSERT INTO STATIONS VALUES (66,  Caribou ,  ME , 47, 68); -- Create and populate table with Operators CREATE TABLE OPERATORS(ID INTEGER PRIMARY KEY, NAME NVARCHAR(20), SURNAME NVARCHAR(20)); INSERT INTO OPERATORS VALUES (50,  John  The Fox ,  Brown  INSERT INTO OPERATORS VALUES (51,  Paul ,  Smith  INSERT INTO OPERATORS VALUES (52,  Michael ,  Williams  -- Create and populate table with normalized temperature and precipitation data CREATE TABLE STATS ( STATION_ID INTEGER REFERENCES STATIONS(ID), MONTH INTEGER CHECK (MONTH BETWEEN 1 AND 12), TEMP_F REAL CHECK (TEMP_F BETWEEN -80 AND 150), RAIN_I REAL CHECK (RAIN_I BETWEEN 0 AND 100), PRIMARY KEY (STATION_ID, MONTH)); INSERT INTO STATS VALUES (13, 1, 57.4, 0.31); INSERT INTO STATS VALUES (13, 7, 91.7, 5.15); INSERT INTO STATS VALUES (44, 1, 27.3, 0.18); INSERT INTO STATS VALUES (44, 7, 74.8, 2.11); INSERT INTO STATS VALUES (66, 1, 6.7, 2.10); INSERT INTO STATS VALUES (66, 7, 65.8, 4.52); -- Create and populate table with Review CREATE TABLE REVIEWS(STATION_ID INTEGER,STAT_MONTH INTEGER,OPERATOR_ID INTEGER) insert into REVIEWS VALUES (13,1,50) insert into REVIEWS VALUES (13,7,50) insert into REVIEWS VALUES (44,7,51) insert into REVIEWS VALUES (44,7,52) insert into REVIEWS VALUES (44,7,50) insert into REVIEWS VALUES (66,1,51) insert into REVIEWS VALUES (66,7,51)

2. 查询结果集

select STATIONS.ID as ID, STATIONS.CITY as City, STATIONS.STATE as State, STATIONS.LAT_N as LatN, STATIONS.LONG_W as LongW, STATS.MONTH as Month, STATS.RAIN_I as Rain, STATS.TEMP_F as Temp, OPERATORS.NAME as Name, OPERATORS.SURNAME as Surname from stations inner join stats on stats.STATION_ID=STATIONS.ID left join reviews on reviews.STATION_ID=stations.id and reviews.STAT_MONTH=STATS.[MONTH] left join OPERATORS on OPERATORS.ID=reviews.OPERATOR_ID

结果:

2. 查询 xml 数据

select stations.*, (select stats.*, (select OPERATORS.* from OPERATORS inner join reviews on OPERATORS.ID=reviews.OPERATOR_ID where reviews.STATION_ID=STATS.STATION_ID and reviews.STAT_MONTH=STATS.MONTH for xml path( operator),type ) operators from STATS where STATS.STATION_ID=stations.ID for xml path(stat),type ) stats from stations for xml path(station),type

结果:

station   ID 13 /ID   CITY Phoenix /CITY   STATE AZ /STATE   LAT_N 3.3000000e+001 /LAT_N   LONG_W 1.1200000e+002 /LONG_W   stats   stat   STATION_ID 13 /STATION_ID   MONTH 1 /MONTH   TEMP_F 5.7400002e+001 /TEMP_F   RAIN_I 3.1000000e-001 /RAIN_I   operators   operator   ID 50 /ID   NAME John  The Fox /NAME   SURNAME Brown /SURNAME   /operator   /operators   /stat   stat   STATION_ID 13 /STATION_ID   MONTH 7 /MONTH   TEMP_F 9.1699997e+001 /TEMP_F   RAIN_I 5.1500001e+000 /RAIN_I   operators   operator   ID 50 /ID   NAME John  The Fox /NAME   SURNAME Brown /SURNAME   /operator   /operators   /stat   /stats   /station   station   ID 44 /ID   CITY Denver /CITY   STATE CO /STATE   LAT_N 4.0000000e+001 /LAT_N   LONG_W 1.0500000e+002 /LONG_W   stats   stat   STATION_ID 44 /STATION_ID   MONTH 1 /MONTH   TEMP_F 2.7299999e+001 /TEMP_F   RAIN_I 1.8000001e-001 /RAIN_I   /stat   stat   STATION_ID 44 /STATION_ID   MONTH 7 /MONTH   TEMP_F 7.4800003e+001 /TEMP_F   RAIN_I 2.1099999e+000 /RAIN_I   operators   operator   ID 51 /ID   NAME Paul /NAME   SURNAME Smith /SURNAME   /operator   operator   ID 52 /ID   NAME Michael /NAME   SURNAME Williams /SURNAME   /operator   operator   ID 50 /ID   NAME John  The Fox /NAME   SURNAME Brown /SURNAME   /operator   /operators   /stat   /stats   /station   station   ID 66 /ID   CITY Caribou /CITY   STATE ME /STATE   LAT_N 4.7000000e+001 /LAT_N   LONG_W 6.8000000e+001 /LONG_W   stats   stat   STATION_ID 66 /STATION_ID   MONTH 1 /MONTH   TEMP_F 6.6999998e+000 /TEMP_F   RAIN_I 2.0999999e+000 /RAIN_I   operators   operator   ID 51 /ID   NAME Paul /NAME   SURNAME Smith /SURNAME   /operator   /operators   /stat   stat   STATION_ID 66 /STATION_ID   MONTH 7 /MONTH   TEMP_F 6.5800003e+001 /TEMP_F   RAIN_I 4.5200000e+000 /RAIN_I   operators   operator   ID 51 /ID   NAME Paul /NAME   SURNAME Smith /SURNAME   /operator   /operators   /stat   /stats   /station

3. 如何生成 JSON 数据

1)创建辅助函数

CREATE FUNCTION [dbo].[qfn_XmlToJson](@XmlData xml) RETURNS nvarchar(max) AS BEGIN declare @m nvarchar(max) SELECT @m= [+Stuff ( (SELECT theline from (SELECT  , +  { +Stuff ( (SELECT  , +coalesce(b.c.value( local-name(.) ,  NVARCHAR(255) ), )+ : + case when b.c.value(count(*) , int )=0 then dbo.[qfn_JsonEscape](b.c.value( text()[1] , NVARCHAR(MAX) )) else dbo.qfn_XmlToJson(b.c.query( *)) end from x.a.nodes(*) b(c) for xml path(),TYPE).value((./text())[1] , NVARCHAR(MAX) ) ,1,1, )+ }  from @XmlData.nodes(/*) x(a) ) JSON(theLine) for xml path(),TYPE).value(. , NVARCHAR(MAX) ) ,1,1, )+ ]  return @m END
CREATE FUNCTION [dbo].[qfn_JsonEscape](@value nvarchar(max) ) returns nvarchar(max) as begin if (@value is null) return  null  if (TRY_PARSE( @value as float) is not null) return @value set @value=replace(@value, \ , \\) set @value=replace(@value, , \) return  +@value+  end

3)查询 sql

select dbo.qfn_XmlToJson ( ( select stations.ID,stations.CITY,stations.STATE,stations.LAT_N,stations.LONG_W , (select stats.*, (select OPERATORS.* from OPERATORS inner join reviews on OPERATORS.ID=reviews.OPERATOR_ID where reviews.STATION_ID=STATS.STATION_ID and reviews.STAT_MONTH=STATS.MONTH for xml path( operator),type ) operators from STATS where STATS.STATION_ID=stations.ID for xml path(stat),type ) stats from stations for xml path(stations),type ) )

结果:

[ { ID :13, CITY : Phoenix , STATE : AZ , LAT_N :3.3000000e+001, LONG_W :1.1200000e+002, stats :[ { STATION_ID :13, MONTH :1, TEMP_F :5.7400002e+001, RAIN_I :3.1000000e-001, operators :[ { ID :50, NAME : John \ The Fox\ , SURNAME : Brown}]}, {STATION_ID :13, MONTH :7, TEMP_F :9.1699997e+001, RAIN_I :5.1500001e+000, operators :[ { ID :50, NAME : John \ The Fox\ , SURNAME : Brown}]}]}, {ID :44, CITY : Denver , STATE : CO , LAT_N :4.0000000e+001, LONG_W :1.0500000e+002, stats :[ { STATION_ID :44, MONTH :1, TEMP_F :2.7299999e+001, RAIN_I :1.8000001e-001}, {STATION_ID :44, MONTH :7, TEMP_F :7.4800003e+001, RAIN_I :2.1099999e+000, operators :[ { ID :51, NAME : Paul , SURNAME : Smith}, {ID :52, NAME : Michael , SURNAME : Williams}, {ID :50, NAME : John \ The Fox\ , SURNAME : Brown}]}]}, {ID :66, CITY : Caribou , STATE : ME , LAT_N :4.7000000e+001, LONG_W :6.8000000e+001, stats :[ { STATION_ID :66, MONTH :1, TEMP_F :6.6999998e+000, RAIN_I :2.0999999e+000, operators :[ { ID :51, NAME : Paul , SURNAME : Smith}]}, {STATION_ID :66, MONTH :7, TEMP_F :6.5800003e+001, RAIN_I :4.5200000e+000, operators :[ { ID :51, NAME : Paul , SURNAME : Smith}]}]}]

JSON 作为灵活的 Web 通信交换架构,如果把配置数据存放在数据库中,直接获取 JSON,那配置就会非常简单了,也能够大量减轻应用服务器的压力!

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注丸趣 TV 行业资讯频道,感谢您对丸趣 TV 的支持。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-18发表,共计6940字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 在线观看自拍 | 两个人的视频观看www | 久久大香香蕉国产免费网站 | 思思久久99热免费精品6 | 午夜影院在线播放 | 中文字幕日本最新乱码视频 | 魔术学姐免费版观看 | 亚洲午夜久久久精品影院 | 久久网国产 | 欧美性高清在线视频 | 欧美一区二区三区视视频 | 色噜噜狠狠先锋影音久久 | 国产99视频精品免费视频76 | 伊人色综合久久天天五月婷 | 久久精品视频9 | 亚欧精品一区二区三区四区 | 中文字幕一区二区三区视频在线 | 天天撸日日夜夜 | 99精品欧美一区 | 免费看欧美一级特黄a大片一 | 午夜免费片在线观看不卡 | 妺妺窝人体色www在线小说 | 亚洲av无码乱码在线观看裸奔 | 色偷偷久久一区二区三区 | 国产一区二区三区影院 | 日本亚洲黄色 | 好爽好紧好大的免费视频国产 | 欧美αv日韩αv另类综合 | 亚洲爆乳精品无码一区二区 | 久久精品国产99久久无毒不卡 | 国产精品女 | 亚洲 自拍 在线 丝袜 | 亚洲精品专区一区二区三区 | 国产免费一区二区三区在线观看 | 国产精品久久婷婷六月丁香 | 国产成人精品综合久久久 | 尤物视频在线观看入口 | 男人影音| 97国产在线视频 | 6080伦理久久亚洲精品 | www.丁香|