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