日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 數據庫 > SQL Server > 正文

實現SQL Server 原生數據從XML生成JSON數據的實例代碼

2024-08-31 01:04:48
字體:
來源:轉載
供稿:網友

實現SQL Server 原生數據從XML生成JSON數據的實例代碼

   SQL Server 是關系數據庫,查詢結果通常都是數據集,但是在一些特殊需求下,我們需要XML數據,最近這些年,JSON作為WebAPI常用的交換數據格式,那么數據庫如何生成JSON數據呢?今天就寫了一個DEMO.

       1.創(chuàng)建表及測試數據

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 

結果:

SQL,Server,XML生成JSON數據,詳解SQL,原生數據從XML生成JSON數據

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)創(chuàng)建輔助函數

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,那配置就會非常簡單了,也能夠大量減輕應用服務器的壓力!

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到MSSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
免费视频最近日韩| 久本草在线中文字幕亚洲欧美| 999精品网| 精品视频123区在线观看| 精品久久久久久综合日本欧美| 三级网站免费观看| 日韩在线视频一区二区三区| 精品区一区二区| 日韩精品视频在线观看免费| 天天综合天天综合| 欧美日韩国产在线看| 欧美日韩国产一级片| 亚欧成人精品| 中文字幕国产欧美| 久久91精品久久久久久秒播| 欧美日韩国产亚洲一区| 99在线精品视频免费观看20| 日韩在线高清视频| 一区二区三区在线播放欧美| 国产亚洲欧美色| 欧美久久久久久蜜桃| 日韩三级一区| 国产免费久久久| 久久99蜜桃精品久久久久小说| 国产在线视频不卡| 欧美日韩在线精品成人综合网| 中文字幕在线观看欧美| 欧美成人精品在线| 久久精品网站免费观看| 日韩精品一级| 日韩在线不卡一区| 国产在线观看精品| 精品熟女一区二区三区| 91精品国产综合久久久久久| 中文字幕第一页在线播放| 欧美日韩中文字幕一区| 欧美日韩高清在线一区| 久久久精品欧美| 人成免费在线视频 | 欧美中文字幕在线视频| 亚洲黄在线观看| 欧美不卡视频一区| 亚洲国产福利视频| 亚洲综合在线小说| 国产视频97| 欧美专区中文字幕| 欧美日韩综合在线免费观看| 国产日韩中文字幕在线| 午夜亚洲福利| 国产丝袜欧美中文另类| 最新中文字幕在线| 国产99精品| 亚洲第一网中文字幕| 日韩在线视频免费观看| 日韩久久99| 亚洲成av人片| 国产无遮挡在线视频免费观看| 日韩在线视频二区| 欧美变态tickling挠脚心| 日韩av一区二区在线观看| 欧美日韩一区二区在线视频| 77777_亚洲午夜久久多人| 国产91大片| 欧美日韩成人一区| 国产日韩精品电影| 日本亚洲欧美| 国产福利一区在线观看| aaa欧美日韩| 亚洲综合中文字幕在线| 日韩亚洲欧美中文高清在线| 亚洲女人天堂a在线播放| 日韩欧美一二三| 亚洲一区中文字幕在线观看| 日韩精品视频网站| 日韩中文在线中文网三级| 日韩亚洲国产欧美| 日韩午夜高潮| 国产成人精品三级| 欧美三级中文字幕在线观看| 日本不卡高清视频一区| 国产福利第一页| 日韩精品视频免费| 亚洲欧美日本另类| 欧美日韩亚洲综合在线| 91精品国产日韩91久久久久久| 日韩中文字幕视频在线| 欧美国产日韩在线播放| 亚洲永久免费视频| 国产视频一区三区| 免费在线国产| 亚洲综合中文字幕在线| 国产欧美久久久| 一区二区三区在线|网站| 国产最顶级的黄色片在线免费观看| 日韩欧美国产免费| 91精品在线观看视频| 亚洲欧美999| 日韩在线精品视频| 日韩一级网站| 91亚洲国产高清| 日韩三级视频在线| 国产黄在线观看| av最新网址| 午夜av一区二区| 色综合天天性综合| 国产在线黄色| 欧美在线视频二区| 在线国产99| 欧美日韩亚洲国内综合网| 国产欧美日韩中文字幕| 欧美日韩亚洲视频| 欧美色欧美亚洲高清在线视频| 欧美日韩中文字幕在线| 天堂在线www天堂中文在线| 欧美日韩尤物久久| 久久久精品免费免费| 欧美三级网址| 日本啊v在线| 一区二区在线观| 久久婷婷中文字幕| 九九精品调教| 亚洲理论中文字幕| 久久99久久久欧美国产| 欧美在线日韩在线| 一区二区三区精品在线观看| 国产久卡久卡久卡久卡视频精品| 日韩欧美中文字幕视频| 精品成人久久av| 国产对白在线| 国产一卡2卡3卡4卡网站免费| 国产自产视频| 蜜桃久久av| 国产黄色在线免费观看| 69免费视频| 二区视频在线观看| 久久视频在线免费观看| 日韩中文首页| 久久视频免费看| 精品日韩av一区二区| 日本精品国语自产拍在线观看| 在线观看免费国产成人软件| 日韩不卡中文字幕| 99综合视频| 国产高清一级片| 日韩欧美不卡在线| 欧美日韩精品综合| 国产日韩在线视频| 亚洲综合在线视频| 国产一区久久| 中文字幕亚洲区| 日韩精品视频网| 91精品国产自产在线| 国产www.大片在线| 国产在线黄色片| 欧美亚洲天堂| 亚洲福利在线视频| 亚洲国产欧美日韩在线| 久久婷婷亚洲| 国产一区精品| 国产欧美日韩亚洲| 在线日韩中文| 一本一道综合狠狠老| 日韩av一区二区在线| 精品国产1区二区| 欧美天堂一区二区| 亚洲日本欧美日韩高观看| 日韩欧美在线影院| 国产在线精品国自产拍免费| 亚洲免费在线观看av| 在线国产99| 亚洲免费专区| 亚洲第一视频| 日韩中文字幕综合| 在线视频1区2区| 国产在线欧美| 91色在线看| av中文在线播放| 欧美日韩国产综合视频在线观看| 欧美中文字幕视频在线观看| 国产视频一区三区| 国产无套粉嫩白浆在线2022年| 一级片免费在线| aaa欧美日韩| 国产黄色一级片| 一区二区三区精品99久久| 一级特黄大欧美久久久| 91欧美日韩麻豆精品| 日韩欧美三级在线| 亚洲九九精品| 国产高清大尺度一区二区不卡| 日本亚洲视频在线| 中文字幕 欧美日韩| 一本一道综合狠狠老| 在线视频三区| 日韩精品在线观| 久久婷婷综合国产| 国产一级片网站| 日韩精品―中文字幕| 日韩三级一区| 久久91精品视频| 精品成人久久av| 亚洲a中文字幕| 亚洲羞羞网站| 国产三级精品网站| 亚洲福利视频专区| 亚洲综合日韩中文字幕v在线| 精品成人久久av| 日韩国产亚洲欧美| 欧美日韩国产影片| 日韩亚洲欧美中文三级| 欧美日韩视频免费播放| 精品日韩欧美在线| av免费在线播放| 91精品国产综合久久精品app| av免费在线播放| 午夜一区二区三区| 久久精品最新免费国产成人| 91精品国产综合久久精品app| 精品国产欧美| av免费看在线| 欧美日韩高清在线播放| 亚洲免费观看视频| 精品一区二区在线观看视频| 日韩欧美综合在线| www在线播放| 欧美日韩久久久| 99精品999| 高清不卡一区二区| 久久久久久久久综合| 亚洲 欧美 日韩系列| 国产嫩草影院久久久久| 欧美三级免费观看| 欧美另类专区| 色99中文字幕| 极品久久久久久| 日韩午夜一区| 国产成人精品日本亚洲专区61| 国产视频一区二| 亚洲人线精品午夜| 中文av字幕一区| 精品久久久久久无| 欧美日韩午夜精品| 91精品免费看| 日韩中文字幕久久| 久久99久久99精品中文字幕| 欧美国产小视频| 日韩国产成人精品| 亚洲a一级视频| 国产成人精品av久久| av免费在线播放| 一区二区三区精品在线观看| 免费国产h视频在线观看86| 国产欧美日韩不卡免费| 国产1卡2卡三卡四卡网站| 中文在线视频观看| 中文字幕在线高清| a天堂在线资源| 日韩中文在线视频| 不卡在线一区二区| 亚洲第一香蕉网| 欧美一级手机免费观看片| 成年人看的羞羞网站| 天天摸日日摸狠狠添| 欧美 日韩 国产在线观看| 日韩视频在线一区二区三区| 国产伦精品免费视频| 国产乱一区二区| 亚洲一二三不卡| av一区在线观看| 激情综合色综合久久| 日韩欧美国产高清91| 日韩中文字幕久久| 日韩久久99| 欧美黄页在线免费观看| 国产日韩专区| 日韩亚洲一区在线| 亚洲三级国产| 亚洲一区中文在线| 激情久久99| 国产绿帽一区二区三区| 日韩欧美亚洲视频| 99久久婷婷| 中文在线视频观看| 欧美三级网址| 日韩视频在线观看一区| 精品亚洲成a人片在线观看| 亚洲免费专区| 日韩精品高清不卡| 精品一区二区在线观看视频| 欧美日韩中文字幕视频| 日本黄色一区二区| 激情久久99| 国产中文伊人| 欧美三级日本三级少妇99| www.老鸭窝.com| 视频一区二区不卡| 日韩高清不卡一区| 国产一级在线播放| 狠狠色噜噜狠狠狠狠97| av免费不卡国产观看| 日韩欧美国产黄色| av免费观看国产| 一区二区不卡久久精品| 久久精品国产2020观看福利| 日韩福利视频导航| 快she精品国产999| 欧美变态tickling挠脚心| 日韩免费视频一区二区| 中文字幕线观看| 91蜜桃在线视频| 日韩在线观看a| 精品国产免费视频| 欧美三级视频在线| 九九精品调教| 影音先锋中文字幕在线观看| 国产 中文 字幕 日韩 在线| 最近中文字幕第一页| 精品国产乱码一区二区| 欧美日韩国产一二三| 在线观看中文字幕一区| 亚洲第一精品在线| 免费在线播放av| 91久久精品网| www.尤物.com| 日韩av一区二区在线| 在线国产三级| 中文字幕在线观看网址| 黄色精品在线观看| 久久久久久91| 亚洲第一中文字幕| 国产在线不卡av| 91精品蜜臀在线一区尤物| 国产区在线看| 国产成人精品av久久| 免费看ww视频网站入口| 欧美日韩综合不卡| 久久久精品欧美| 日韩中文字幕网| 91精品国产自产在线| 久久久精品国产99久久精品芒果| 国产99在线 | 亚洲| 91精品在线国产| 国产日韩精品电影| 99热最新网址| 美女免费视频一区| 亚洲专区一二三| 欧美日韩中文字幕综合视频 | 中文字幕欧美日韩在线不卡| 亚洲欧美99| 日韩一级网站| 欧美日韩亚洲91| 免费视频二区| 国产综合成人久久大片91| 一区二区三区在线不卡| 91精品国产综合久久蜜臀| 欧美日韩中文字幕在线观看| 亚洲一区日韩在线| 91日韩中文字幕| 中文字幕视频一区二区三区久| 日韩在线精品视频| 亚洲国内精品视频| 亚洲欧洲在线观看av| 一区二区不卡视频在线观看| 色国产在线视频| 欧美在线视频一区二区| 久久中文免费视频| 欧美xxxx中国| 久久精品网站免费观看| 日韩欧美资源站| 精品久久九九| 国产在线日韩欧美| 中文字幕精品www乱入免费视频| 欧美日韩视频网站| 中文在线不卡视频| 91精品国产91久久久久青草| 欧美在线中文字幕| 精品人妻一区二区三区视频| 精产国产伦理一二三区| 日韩精品在线观看视频| 欧美日韩国产首页在线观看| 91精品视频播放| 91久久在线| 欧美日韩国产高清视频| a视频在线播放| 日韩在线视频一区二区三区| 国产综合成人久久大片91| 亚洲视频在线观看日本a| 欧美日韩三级在线观看| 中文字幕亚洲二区| 国产欧美在线观看| 国产欧美日韩在线| 91精品国产综合久久香蕉的特点| 欧美中文字幕精品| 欧美日韩国产在线观看| 中文精品在线| 中文字幕国产欧美| 亚洲日本精品视频| 日韩中文字幕在线播放| 日韩视频中文| 精品久久91|