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