一、前言
從 SQL Server 2005 開始,就增加了 xml 字段類型,也就是說可以直接把 xml 內(nèi)容存儲在該字段中,并且 SQL Server 會把它當(dāng)作 xml 來對待,而不是當(dāng)作 varchar 來對待。
隨著SQL Server 對XML字段的支持,相應(yīng)的,T-SQL語句也提供了大量對XML操作的功能來配合SQL Server中XML字段的使用。本文主要說明如何使用SQL語句對XML進(jìn)行操作。
二、定義XML字段
在進(jìn)行數(shù)據(jù)庫的設(shè)計中,我們可以在表設(shè)計器中,很方便的將一個字段定義為XML類型。需要注意的是,XML字段不能用來作為主鍵或者索引鍵。同樣,我們也可以使用SQL語句來創(chuàng)建使用XML字段的數(shù)據(jù)表,下面的語句創(chuàng)建一個名為“docs”的表,該表帶有整型主鍵“pk”和非類型化的 XML 列“xCol”:
三、XML字段注意點
三、XML字段注意點
SQL Server 中以 Unicode(UTF-16) 來存儲 XML 數(shù)據(jù)。
XML 字段最多可存儲 2G 的數(shù)據(jù)。
可以像插入字符串一樣向 XML 字段寫入內(nèi)容。
當(dāng)在 xml 數(shù)據(jù)類型實例中存儲 XML 數(shù)據(jù)時,不會保留 XML 聲明(如 )。
插入的 xml 內(nèi)容的屬性的順序可能會與原 xml 實例的順序變化。
不保留屬性值前后的單引號和雙引號。
不保留命名空間前綴。
可以對 XML 字段中的 XML 內(nèi)容建立索引。
可以對 XML 字段中的 XML 內(nèi)容建立約束,比如 age 節(jié)點必須大于等于 18。
可以通過創(chuàng)建架構(gòu)來對 XML 進(jìn)行類型化,比如讓 xml 內(nèi)容的
四、查詢操作
在定義了一個XML類型的數(shù)據(jù)之后,我們最常用的就是查詢操作,下面我們來介紹如何使用SQL語句來進(jìn)行查詢操作的。
在T-Sql中,提供了兩個對XML類型數(shù)據(jù)進(jìn)行查詢的函數(shù),分別是query(xquery)和value(xquery, dataType),其中,query(xquery)得到的是帶有標(biāo)簽的數(shù)據(jù),而value(xquery, dataType)得到的則是標(biāo)簽的內(nèi)容。接下類我們分別使用這兩個函數(shù)來進(jìn)行查詢。
1、使用query(xquery) 查詢
我們需要得到書的標(biāo)題(title),使用query(xquery)來進(jìn)行查詢,查詢語句為:
4、使用xpath進(jìn)行查詢
xpath是.net平臺下支持的,統(tǒng)一的Xml查詢語句。使用XPath可以方便的得到想要的節(jié)點,而不用使用where語句。例如,
--得到id為0002的book節(jié)點