程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL2008 詳解直接將XML存入到SQL中

SQL2008 詳解直接將XML存入到SQL中

編輯:MSSQL

SQL2008 詳解直接將XML存入到SQL中。本站提示廣大學習愛好者:(SQL2008 詳解直接將XML存入到SQL中)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL2008 詳解直接將XML存入到SQL中正文


一、前言

從 SQL Server 2005 開端,就添加了 xml 字段類型,也就是說可以直接把 xml 內容存儲在該字段中,並且 SQL Server 會把它當作 xml 來看待,而不是當作 varchar 來看待。

隨著SQL Server 對XML字段的支持,相應的,T-SQL語句也提供了少量對XML操作的功用來配合SQL Server中XML字段的運用。本文次要闡明如何運用SQL語句對XML停止操作。

二、定義XML字段

     在停止數據庫的設計中,我們可以在表設計器中,很方便的將一個字段定義為XML類型。需求留意的是,XML字段不能用來作為主鍵或許索引鍵。異樣,我們也可以運用SQL語句來創立運用XML字段的數據表,上面的語句創立一個名為“docs”的表,該表帶有整型主鍵“pk”和非類型化的 XML 列“xCol”:

CREATE TABLE docs (pk INT PRIMARY KEY, xCol XML not null)

XML類型除了在表中運用,還可以在存儲進程、事務、函數等中呈現。上面我們來完成我們對XML操作的第一步,運用SQL語句定義一個XML類型的數據,並為它賦值:

set @xmlDoc='<?xml version="1.0" ?>

    <books>

       <book id="0001">

<title>C Program</title>

<author>David</author>

<price>21</price>

 </book>

 <book id="0002">

<title>你必需知道的.NET</title>

<author>王濤</author>

<price>79</price>

 </book>

  </books>'

select @xmlDoc 

三、XML字段留意點

三、XML字段留意點

SQL Server 中以 Unicode(UTF-16) 來存儲 XML 數據。 XML 字段最多可存儲 2G 的數據。 可以像拔出字符串一樣向 XML 字段寫入內容。 當在 xml 數據類型實例中存儲 XML 數據時,不會保存 XML 聲明(如 <?xml version='1.0'?>)。 拔出的 xml 內容的屬性的順序能夠會與原 xml 實例的順序變化。 不保存屬性值前後的單引號和雙引號。 不保存命名空間前綴。 可以對 XML 字段中的 XML 內容樹立索引。 可以對 XML 字段中的 XML 內容樹立約束,比方 age 節點必需大於等於 18。 可以經過創立架構來對 XML 停止類型化,比方讓 xml 內容的 <user> 節點上面必需有 <fullname> 節點。

四、查詢操作

在定義了一個XML類型的數據之後,我們最常用的就是查詢操作,上面我們來引見如何運用SQL語句來停止查詢操作的。

     在T-Sql中,提供了兩個對XML類型數據停止查詢的函數,辨別是query(xquery)和value(xquery, dataType),其中,query(xquery)失掉的是帶有標簽的數據,而value(xquery, dataType)失掉的則是標簽的內容。接下類我們辨別運用這兩個函數來停止查詢。

1、運用query(xquery) 查詢

我們需求失掉書的標題(title),運用query(xquery)來停止查詢,查詢語句為:

select @xmlDoc.query('(books/book/title)[1]')

運轉後果如圖:

2、運用value(xquery, dataType) 查詢

異樣是失掉書的標題,運用value函數,需求指明兩個參數,一個為xquery, 另一個為失掉數據的類型。看上面的查詢語句:

select @xmlDoc.value('(books/book/title)[1]', 'nvarchar(max)')

運轉後果如圖:

 

3、查詢屬性值

無論是運用query還是value,都可以很容易的失掉一個節點的某個屬性值,例如,我們很希望失掉book節點的id,我們這裡運用value辦法停止查詢,語句為:

select @xmlDoc.value('(books/book/@id)[1]', 'nvarchar(max)')

運轉後果如圖:

4、運用xpath停止查詢

xpath是.net平台下支持的,一致的Xml查詢語句。運用XPath可以方便的失掉想要的節點,而不必運用where語句。例如,

--失掉id為0002的book節點

select @xmlDoc.query('(/books/book[@id="0002"])')

下面的語句可以獨立運轉,它失掉的是id為0002的節點。運轉後果如下

五、修正操作

         SQL的修正操作包括更新和刪除。SQL提供了modify()辦法,完成對Xml的修正操作。modify辦法的參數為XML修正言語。XML修正言語相似於SQL 的Insert、Delete、UpDate,但並不一樣。

1、修正節點值

我們希望將id為0001的書的價錢(price)修正為100, 我們就可以運用modify辦法。代碼如下:

set @xmlDoc.modify('replace value of (/books/book[@id=0001]/price/text())[1] with "100"')

--失掉id為0001的book節點

select @xmlDoc.query('(/books/book[@id="0001"])')

留意:modify辦法必需呈現在set的前面。運轉後果如圖:

 

2、刪除節點

接上去我們來刪除id為0002的節點,代碼如下:

--刪除節點id為0002的book節點

set @xmlDoc.modify('delete /books/book[@id=0002]')

select @xmlDoc

運轉後果如圖:

3、添加節點

很多時分,我們還需求向xml外面添加節點,這個時分我們一樣需求運用modify辦法。上面我們就向id為0001的book節點中添加一個ISBN節點,代碼如下:

--添加節點

set @xmlDoc.modify('insert <isbn>78-596-134</isbn> before (/books/book[@id=0001]/price)[1]')

select @xmlDoc.query('(/books/book[@id="0001"]/isbn)')

運轉後果如圖:

4、添加和刪除屬性

當你學會對節點的操作當前,你會發現,很多時分,我們需求對節點停止操作。這個時分我們仍然運用modify辦法,例如,向id為0001的book節點中添加一個date屬性,用來存儲出版時間。代碼如下:

--添加屬性

set @xmlDoc.modify('insert attribute date{"2008-11-27"} into (/books/book[@id=0001])[1]')

select @xmlDoc.query('(/books/book[@id="0001"])')

運轉後果如圖:

假如你想同時向一個節點添加多個屬性,你可以運用一個屬性的集合來完成,屬性的集合可以寫成:(attribute date{"2008-11-27"}, attribute year{"2008"}),你還可以添加更多。這裡就不再舉例了。

5、刪除屬性

刪除一個屬性,例如刪除id為0001 的book節點的id屬性,我們可以運用如下代碼:

--刪除屬性

set @xmlDoc.modify('delete books/book[@id="0001"]/@id')

select @xmlDoc.query('(/books/book)[1]')

運轉後果如圖:

6、修正屬性

修正屬性值也是很常用的,例如把id為0001的book節點的id屬性修正為0005,我們可以運用如下代碼:

--修正屬性

set @xmlDoc.modify('replace value of ( books/book[@id="0001"]/@id)[1] with "0005"')

select @xmlDoc.query('(/books/book)[1]')

運轉後果如圖:

經過下面的學習,置信你曾經可以很好的在SQL中運用Xml類型了,上面是我們沒有提到的:exist()辦法,用來判別指定的節點能否存在,前往值為true或false; nodes()辦法,用來把一組由一個查詢前往的節點轉換成一個相似於後果集的表中的一組記載行。 你可以去MSDN查閱  http://msdn.microsoft.com/zh-cn/library/ms190798.aspx。

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved