亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

sql server中對xml進行操作

2024-08-31 00:55:05
字體:
來源:轉載
供稿:網友
sql server中對xml進行操作一、前言

SQL Server 2005 引入了一種稱為 XML 的本機數據類型。用戶可以創建這樣的表,它在關系列之外還有一個或多個 XML 類型的列;此外,還允許帶有變量和參數。為了更好地支持 XML 模型特征(例如文檔順序和遞歸結構),XML 值以內部格式存儲為大型二進制對象 (BLOB)。

用戶將一個XML數據存入數據庫的時候,可以使用這個XML的字符串,SQL Server會自動的將這個字符串轉化為XML類型,并存儲到數據庫中。

隨著SQL Server 對XML字段的支持,相應的,T-SQL語句也提供了大量對XML操作的功能來配合SQL Server中XML字段的使用。本文主要說明如何使用SQL語句對XML進行操作。(以上摘自Qi Fei's Blog)

首先要明確一個基本原則,XML類型的數據之間以及XML類型與其它數據類型之間都是不能比較的,也就是說XML類型的數據不能出現在等號的任何一邊。

大致可分為查詢類,修改類和跨域查詢類。

查詢類包含query(),value(),exist()和nodes().

修改類包含modify().

跨域查詢類包含sql:variable()和sql:column().

二、創建XML自定義數據庫表

創建xml自定義表:以前在網上查的都是

declare @xmlDoc xml;

set @xmlDoc='<book id="0001">

<title>C PRogram</title>

<author>David</author>

<price>21</price>

</book>' 這樣的,但是這僅僅是學習,不能真正用在項目或實際中缺乏實踐性。因為很少有直接操作sql內存中的這些。

閑話少說,直接上SQL創建表語句

 1 --1、創建xml測試數據庫表Xml_Table  Author:Fly , Email:feifei12300@126.com 2 use Fly_Test --測試數據庫 3 go 4 create table Xml_Table(ID  INT identity PRIMARY KEY, XmlData  XML); 5 --2、插入測試數據 6 insert into Xml_Table(XmlData) values 7 ('<book id="0001"> 8 <title>SqlServer2005</title> 9 <author>Fly</author>10 <price>21</price>11 </book>12 ');13 insert into Xml_Table(XmlData) values14 ('<book id="0002">15 <title>SqlServer2008</title>16 <author>Fly</author>17 <price>22</price>18 </book>19 ');20 insert into Xml_Table(XmlData) values21 ('<book id="0003">22 <title>SqlServer2012</title>23 <author>Fly</author>24 <price>23</price>25 </book>26 ');27 --3、查詢28 select * from Xml_Table;

結果如圖:

三、對xml操作

對xml操作,也不做過多解析,如有不清晰的可以聯系我;Emil:feifei12300@126.com

需要注意的是給每個節點添加屬性或者添加節點的時候如果已經存在的會報錯,所以最好是先exist('你的條件')=0 一下;

 1 --4、對XML操作真正開始了 2 --SQLServer2005 中對 XML 的處理功能顯然增強了很多,提供了 query(),value(),exist(),modify(),nodes() 3 --查詢所有書的名稱及作者 4 select XmlData.query('/book') as Title,XmlData.query('/book/author') as Author from Xml_Table; 5 --顯然這不是我們想要的數據 6 select XmlData.value('(/book/title)[1]','nvarchar(max)') as Title,  7     XmlData.value('(/book/author)[1]','nvarchar(max)') as Author from Xml_Table; 8 --查詢數目編號為0001的書的信息 9 select  XmlData.value('(/book/title)[1]','nvarchar(max)') as Title,10     XmlData.value('(/book/@id)[1]','nvarchar(max)') as BookID from Xml_Table11     where XmlData.value('(/book/@id)[1]','nvarchar(max)') = '0001';12 --修改數目編號為0001 的價格為 1113 update Xml_Table14     set XmlData.modify('replace value of (/book[@id="0001"]/price/text())[1] with "11"');15 --修改 所有的數目作者為Fly_1230016 update Xml_Table17     set XmlData.modify('replace value of (/book/author/text())[1] with "Fly_12300"')18 --查看是否編號為0001的價格修改為11,且所有作者修改為Fly_1230019 select  XmlData.value('(/book/price)[1]','nvarchar(max)') as Title,20     XmlData.value('(/book/@id)[1]','nvarchar(max)') as BookID,21     XmlData.value('(/book/author)[1]','nvarchar(max)') as Author from Xml_Table22     where XmlData.value('(/book/@id)[1]','nvarchar(max)') = '0001';23 --添加屬性  24 update Xml_Table25 set XmlData.modify('insert attribute isbn {"12300321"} into (/book)[1]');26 --查看是否存在屬性isbn27 select  XmlData.value('(/book/@isbn)[1]','nvarchar(max)') as isbn,28     XmlData.value('(/book/@id)[1]','nvarchar(max)') as BookID from Xml_Table29     where XmlData.value('(/book/@id)[1]','nvarchar(max)') = '0001';30 --在編號為0001的添加子節點 category  為 Computer 的分類31 update Xml_Table32     set XmlData.modify('insert <category>Computer</category> before (/book[@id=0001]/author)[1]');33 --查看是否添加了category節點34 select  XmlData.value('(/book/category)[1]','nvarchar(max)') as category,35     XmlData.value('(/book/@id)[1]','nvarchar(max)') as BookID,XmlData from Xml_Table36     where XmlData.value('(/book/@id)[1]','nvarchar(max)') = '0001';37 --刪除節點38 update Xml_Table39     set XmlData.modify('delete /book[@id=0001]/category');40 --查看是否刪除了category節點41 select  XmlData.value('(/book/category)[1]','nvarchar(max)') as category,42     XmlData.value('(/book/@id)[1]','nvarchar(max)') as BookID,XmlData from Xml_Table43     where XmlData.value('(/book/@id)[1]','nvarchar(max)') = '0001';44 --nodes()  查詢 book的編碼45 select ids.value('@id', 'varchar(max)'),ids.value('(title)[1]','nvarchar(max)') title from  Xml_Table 46     CROSS APPLY XmlData.nodes('//book') as X(ids) ;47 --exist()48 select XmlData.value('(/book/@id)[1]','nvarchar(max)') as BookID49     from Xml_Table 50     where XmlData.exist('(/book/@id)')=1 --判斷是否存在

如圖:

四、xml xpath
 1 create table Books(ID nvarchar(32) not null,Name nvarchar(64)); 2 insert into Books values ('0001','MSSQLServer2005'); --書名MSSQLServer2005 3 insert into Books values ('0002','MSSQLServer2008'); --書名MSSQLServer2008 4 insert into Books values ('0003','MSSQLServer2012'); --書名MSSQLServer2012 5 --以下為xml   path 6 SELECT ID,NAME FROM [dbo].[Books] FOR XML AUTO; 7 SELECT ID,NAME FROM [dbo].[Books] FOR XML AUTO ,ELEMENTS ,ROOT('books'); 8 SELECT ID as 'BookID',NAME as 'BookName' FROM [dbo].[Books] FOR XML RAW; 9 SELECT ID,NAME FROM [dbo].[Books] FOR XML RAW('book') ,ELEMENTS ,ROOT('books');10 SELECT ID,NAME FROM [dbo].[Books] FOR XML PATH('') ;11 SELECT ID as 'Detail/@ID',NAME as 'Detail/Name' FROM [dbo].[Books] FOR XML PATH('Book'), ROOT('Books');12 SELECT STUFF((SELECT ';' + Name FROM [dbo].[Books] FOR XML PATH('')),1,1,'');

如圖:

五、跨域操作
 1 --根據Books 表中的ID,Xml_Table 表中的XmlData ID屬性  修改對應的 title屬性 2 --即:根據在books中編碼0001的 的名稱 MSSQLServer2005 3 --修改為Xml_Table表中book編碼為0001的title為 MSSQLServer2005 4  5 declare @data xml 6 declare @id nvarchar(36) 7 declare @name nvarchar(64) 8 declare custore_name cursor for  9 select Books.ID,Xml_Table.XmlData,Books.Name10 from Books,Xml_Table11     where Books.ID= Xml_Table.XmlData.value('(/book/@id)[1]','nvarchar(max)');12  OPEN custore_name   13 FETCH NEXT FROM custore_name into @id, @data, @name14 WHILE(@@FETCH_STATUS=0)      15  BEGIN      16   set @data.modify(('replace value of (/book/title/text())[1] with sql:variable("@name")'))17   update Xml_Table set XmlData = @data where XmlData.value('(/book/@id)[1]','nvarchar(max)') = @id   18  FETCH NEXT FROM custore_name into   19     @id, @data, @name20  END    21  CLOSE custore_name  22  deallocate custore_name23 24  select * from Xml_Table

如圖所示:

六、結束語

需要注意點:添加、修改屬性或者節點需要先判斷是否存在(exist);跨域操作時使用了游標,不熟悉的可以自己查閱相關資料。

最后說明:轉載請注明出處;

新手學習,高手忽略不計即可;

.net技術交流群:70895254;


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久亚洲一区二区三区四区五区高| 狠狠躁夜夜躁人人爽天天天天97| y97精品国产97久久久久久| 亚洲影院色无极综合| 插插插亚洲综合网| 热久久99这里有精品| 亚洲视频网站在线观看| 亚洲欧美综合另类中字| 久久人人爽国产| 精品无码久久久久久国产| 91久久精品国产91久久性色| 国产精品久久久久久中文字| 日韩在线视频观看| 久久久久久久久久国产| 96pao国产成视频永久免费| 成人天堂噜噜噜| 精品性高朝久久久久久久| 久久在线观看视频| 九九久久精品一区| 亚洲第一精品电影| 亚洲欧美综合精品久久成人| 北条麻妃一区二区在线观看| 欧美成人免费一级人片100| 亚洲日韩欧美视频一区| 97视频在线观看免费| 丝袜美腿精品国产二区| 欧美三级欧美成人高清www| 在线播放国产精品| 欧美亚洲第一区| 国产精品国内视频| 亚洲一区二区三区在线视频| 久久中文久久字幕| 国产精品久久久久免费a∨大胸| 久久久久久久999精品视频| 成人黄色在线观看| 亚洲日本中文字幕| 91精品国产九九九久久久亚洲| 欧美一级成年大片在线观看| 中文字幕在线视频日韩| 97精品伊人久久久大香线蕉| 日韩美女在线看| 国产成人在线播放| 亚洲在线免费视频| 8x海外华人永久免费日韩内陆视频| 精品福利在线视频| 亚洲风情亚aⅴ在线发布| 色综合伊人色综合网| 国产欧美日韩精品丝袜高跟鞋| 久久精品亚洲94久久精品| 岛国视频午夜一区免费在线观看| 91高清免费在线观看| 久久综合伊人77777| 精品一区二区三区三区| 国产成人av网址| 精品亚洲一区二区三区在线观看| 亚洲免费av网址| 日本国产欧美一区二区三区| 国产成人久久久精品一区| 国产丝袜一区二区三区免费视频| 久热99视频在线观看| 黄色一区二区在线| 亚洲a在线播放| 91av成人在线| 国产精品吹潮在线观看| 日韩中文字幕在线看| 日韩视频免费看| 久久6精品影院| 国产精品成人久久久久| 在线亚洲男人天堂| 亚洲人成啪啪网站| 国产精品7m视频| 最近2019中文免费高清视频观看www99| 97香蕉超级碰碰久久免费的优势| 爱福利视频一区| 中文字幕免费精品一区高清| 18性欧美xxxⅹ性满足| 人人爽久久涩噜噜噜网站| 国产精品日韩电影| 亚洲91精品在线| 欧美成人精品h版在线观看| 国产精品爽黄69| 中文字幕视频在线免费欧美日韩综合在线看| 国内精品免费午夜毛片| 精品国产乱码久久久久久天美| 日韩在线观看免费高清完整版| 国产va免费精品高清在线观看| 国产在线视频91| 国产精品v日韩精品| 午夜精品久久久久久久白皮肤| 国产精品爽爽爽| 日韩毛片在线看| 亚洲a级在线播放观看| 亚洲欧美中文字幕在线一区| 爽爽爽爽爽爽爽成人免费观看| 亚洲国产精久久久久久久| 国产成人福利视频| 国产成人一区二区三区| 久久亚洲国产精品| 国产精品久久久久久久久久免费| 中日韩美女免费视频网址在线观看| 日韩电影中文字幕在线| 欧美高清在线视频观看不卡| 久久久久久久久久久网站| 国产在线观看一区二区三区| 亚洲精品资源在线| 一本色道久久综合狠狠躁篇的优点| 色偷偷综合社区| 欧美美最猛性xxxxxx| 青青草一区二区| 国产精品成人观看视频国产奇米| 亚洲精品电影网| 日本国产精品视频| 亚洲春色另类小说| 午夜美女久久久久爽久久| 国语自产精品视频在免费| 精品女厕一区二区三区| 亚洲www在线| 欧美日韩福利电影| 亚洲精品国产欧美| 亚洲精品福利在线| 精品久久中文字幕久久av| 亚洲91精品在线观看| 亚洲高清av在线| 国产日韩在线精品av| 亚洲成人精品视频在线观看| 国产精品高潮视频| 成人a视频在线观看| 亚洲精品91美女久久久久久久| xxx一区二区| 亚洲 日韩 国产第一| 久久这里有精品视频| 日本最新高清不卡中文字幕| 国产美女扒开尿口久久久| 中文字幕亚洲天堂| 欧美日韩亚洲精品内裤| 亚洲精品国产免费| 亚洲色图校园春色| 久久国产精品影片| 国产亚洲人成a一在线v站| 日韩在线视频中文字幕| 久久久久久久97| 中文字幕免费国产精品| 国产视频在线一区二区| 欧美日韩国产在线播放| 亚洲精品国偷自产在线99热| 日韩精品免费观看| 欧美第一黄色网| 国产91精品最新在线播放| 亚洲成人亚洲激情| 国产精品久久久久久搜索| yw.139尤物在线精品视频| 成人动漫网站在线观看| 国产精品扒开腿做爽爽爽的视频| 欧美福利视频在线观看| 国产精品第8页| 欧美精品福利视频| 欧美大秀在线观看| 欧美成人精品不卡视频在线观看| 91精品视频在线免费观看| 欧美黄色片视频| 国产精品影片在线观看| 日韩免费中文字幕| 亚洲国产精品成人精品| 亚洲男人天堂九九视频|