国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

實現(xiàn)SQL Server 原生數(shù)據(jù)從XML生成JSON數(shù)據(jù)的實例代碼

2024-08-31 01:04:48
字體:
來源:轉載
供稿:網(wǎng)友

實現(xiàn)SQL Server 原生數(shù)據(jù)從XML生成JSON數(shù)據(jù)的實例代碼

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

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

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數(shù)據(jù),詳解SQL,原生數(shù)據(jù)從XML生成JSON數(shù)據(jù)

2.查詢xml數(shù)據(jù)

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數(shù)據(jù)

1)創(chuàng)建輔助函數(shù)

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通信交換架構,如果把配置數(shù)據(jù)存放在數(shù)據(jù)庫中,直接獲取JSON,那配置就會非常簡單了,也能夠大量減輕應用服務器的壓力!

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


注:相關教程知識閱讀請移步到MSSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
精品国产一区二区三区久久久狼牙| 国产中文在线观看| 国产精品理人伦一区二区三区| 欧美性猛交p30| wwwww在线观看免费视频| 色吊丝av中文字幕| 欧美日韩视频精品二区| 欧美色第一页| 国产精品自产拍在线网站| 国产一级激情| 精品网站www| 老鸭窝av在线| 国产精品视频一区二区图片| 色中文字幕在线| 国产一区精品| av中文字幕在线看| 国产精品伦理一区二区三区 | 国产免费av在线| 国产成人午夜精品| 99高清免费国产自产拍| 亚洲wwwwww| 国产精品偷乱一区二区三区| 在线免费黄色毛片| 综合激情丁香| 二区三区中文字幕| 欧洲有码在线视频| 在线观看免费黄色| 91久久精品国产性色| 狠狠操五月天| 欧美日韩视频精品二区| av三级在线观看| 97中文字幕| 国产黄在线播放| 国产一二三区在线| 成人亚洲一区二区三区| 尤物在线精品视频| 精品国产美女福利到在线不卡| 国产网红女主播精品视频| 免费午夜一级| 久草.com| 久久91精品视频| 青青草在线播放| 女子免费在线观看视频www| 伊人222成人综合网| 精品国产高清a毛片无毒不卡| 国产免费永久在线观看| 国产乱xxⅹxx国语对白| 尤物在线网址| 国产天堂av| 精品无人乱码| 精品无吗乱吗av国产爱色| 国产aa视频| 亚洲日本一区二区三区在线观看| 在线视频中文字幕| 不卡av免费观看| 最近中文字幕mv2018在线高清| 国产一级视频| 精品176二区| 一本大道久久a久久精品| 亚洲妇熟xxxx妇色黄| 国产视频精品久久| 中文字幕一区免费| 最好看更新中文字幕| 中文字幕在线免费视频| 最新天堂资源在线资源| 中文字幕国产欧美| 国产精品视频二区三区| 91在线网址| 男人操女人免费网站| 国产精品自拍亚洲| 精品一区二区三区免费站| 亚洲欧美日韩成人网| 国产在线高潮| 中文一区在线观看| 免费高清av| 国产成人亚洲欧美电影| 免费a级在线播放| 国产对白国语对白| 九九精品视频在线观看九九| 国产福利资源| 久热中文字幕在线观看| 91麻豆精品国产91久久| 国产乱视频在线观看| av超碰在线| 国产三区视频在线观看| 免费a级毛片在线观看| 99久久精品免费观看国产| 国产农村一级特黄α**毛片| 伊人222成人综合网| 国产日韩欧美第一页| 久热中文字幕精品视频在线| 99在线播放| 国产情侣高潮对白| 国产你懂的在线观看| 超碰在线免费播放| 影音先锋在线中文字幕| 国产欧美日韩精品综合| 最近中文字幕mv免费高清视频8 | 国产视频精品久久| 高清欧美精品xxxxx在线看| 天天草天天草| 亚洲欧美小说国产图片| 在线天堂中文www视软件| 国产馆av播放| 91久久麻豆| 亚洲一道本在线| 日韩精品免费一区二区| eeuss影院在线观看| 97影院理论午夜| 伊人中文在线| 精品久久久久一区二区三区| 精品电影在线| 亚洲精品视频区| www.大网伊人| 丁香在线视频| 91亚洲天堂| 亚洲大香人伊一本线| aaa大片在线观看| 欧洲亚洲精品视频| 国产鲁鲁视频在线观看特色| 天天爱天天色| 在线中文字幕第一页| 青青草视频在线观看| 久久精品免视着国产成人| 最近免费中文字幕在线第一页 | 香蕉视频网站在线观看| 男人天堂v视频| 综合图区亚洲白拍在线 | 亚洲精品视频区| 在线观看精品视频一区二区三区| a视频在线观看| 天天操天天是| 亚洲第一区视频| 国产午夜在线| 免费看ww视频网站入口| 97视频在线| 国产一级免费看| 黄色网址在线免费播放| 精品国产二区三区| 国产人成精品| 国产麻豆麻豆| 免费在线超碰| 亚洲精品少妇久久久久久| 国产精品秘入口| 久草在线资源福利| 国产videos| 国产一级粉嫩xxxx| 久久精品视频观看| 日本天堂影院在线视频| 精品国内一区二区三区免费视频| 国产乱子伦三级在线播放| а√天堂www在线а√天堂视频| 国产福利在线视频| 国产小视频在线播放| 国产免费福利网站| 成年网在线观看免费观看网址| 亚洲成人福利| 一区二区三区四区在线免费视频| 国产午夜在线| 国产无套粉嫩白浆在线2022年| 欧美成人久久电影香蕉| www在线观看播放免费视频日本| 亚洲欧洲成人| 爱福利在线视频| а√资源新版在线天堂| www狠狠操| 久久精品最新免费国产成人| 国产在线高清理伦片a| 国产精品外围在线观看| 国产福利小视频在线观看| 在线视频xx| 超碰免费在线播放| 欧美国产中文| 中中文字幕av在线| 2019中文字幕在线视频| 国产成人亚洲精品播放器下载| 91国内精品在线视频| 精品一区二区在线欧美| sese在线视频| 88av在线| 在线看a视频| 九九视频精品在线| 国产日韩网站| 四虎久久影院| 五月婷婷丁香激情| 精品一二三区视频| 碰草在线视频| 国产精品合集一区二区| 亚洲成人福利| 国产免费黄网站| 2018狠狠干| 五月婷婷在线观看| av资源网站在线观看| 国产男女av| 日本高清中文字幕二区在线| 国产偷激情在线| 久久亚洲国产成人亚| 精品国产一区二区三区四区阿崩| 久草在线视频网| 亚洲国产aⅴ精品|