SQL Server 2005中XML操作函數(shù)詳解
首先要明確一個(gè)基本原則,XML類型的數(shù)據(jù)之間以及XML類型與其它數(shù)據(jù)類型之間都是不能比較的,也就是說XML類型的數(shù)據(jù)不能出現(xiàn)在等號(hào)的任何一邊。
大致可分為查詢類,修改類和跨域查詢類。
查詢類包含query(),value(),exist()和nodes().
修改類包含modify().
跨域查詢類包含sql:variable()和sql:column().
查詢類
1. query()方法:返回滿足條件的所有XML行。只能用于SELECT子句當(dāng)中。
2. value()方法:返回從XML節(jié)點(diǎn)中提取的標(biāo)量值。必須在value()方法的第二個(gè)參數(shù)中指定所返回的標(biāo)量的數(shù)據(jù)類型,所以value()方法可以與其它標(biāo)量進(jìn)行比較??捎糜赟ELECT子句和WHERE子句。
3. exist()方法:返回int型標(biāo)量的0或者1。對(duì)每行的XML數(shù)據(jù)類型進(jìn)行存在性檢查??捎糜赟ELECT子句和WHERE子句。
4. nodes()方法:返回只有一個(gè)欄位的table,且該table的欄位是XML數(shù)據(jù)類型。所以nodes()方法只能出現(xiàn)在FROM子句中。
示例:
1.query()
SELECT pk, xCol.query('/doc[@id = 123]//section')
FROM docs 
 | 
2.value()
SELECT xCol.value('data((/doc//section[@num = 3]/heading)[1])', 'nvarchar(max)') | 
3.exist()
SELECT xCol.query('/doc[@id = 123]//section') | 
4.nodes()
SELECT nref.value('@genre', 'varchar(max)') LastName | 
修改類
modify()方法:允許修改XML實(shí)例的某些部分,例如添加或刪除子樹,或者更新標(biāo)量值(如將書的價(jià)格從9.99替換為39.99)。
無返回值,只能用于SET子句中。
--在指定位置添加子樹('insert...after...')
UPDATE docs SET xCol.modify(' | 
--更改指定節(jié)點(diǎn)中的標(biāo)量值('replace...with...')
UPDATE XmlCatalog  | 
跨域查詢類
如果數(shù)據(jù)駐留在關(guān)系數(shù)據(jù)類型的列和XML數(shù)據(jù)類型的列的組合中,就可能需要編寫查詢來組合關(guān)系數(shù)據(jù)處理和XML數(shù)據(jù)處理(組合的對(duì)象還可以是標(biāo)量數(shù)據(jù)類型的SQL變量和XML數(shù)據(jù)),這樣的查詢就叫跨域查詢。
sql:variable()方法:可以在XQuery或XML DML表達(dá)式中應(yīng)用SQL變量的值。
sql:variable()
DECLARE @isbn varchar(20)  | 
sql:column()方法:可以在XQuery或XML DML表達(dá)式中使用來自關(guān)系列的值。
【編輯推薦】















 
 
 
 
 
 
 