一、前言
SQLServer 2005 引入了一種稱為 XML 的本機數據類型。用戶可以創建這樣的表,它在關系列之外還有一個或多個 XML 類型的列;此外,還允許帶有變量和參數。為了更好地支持 XML 模型特征(例如文檔順序和遞歸結構),XML 值以內部格式存儲為大型二進制對象 (BLOB)。
用戶將一個XML數據存入數據庫的時候,可以使用這個XML的字符串,SQL Server會自動的將這個字符串轉化為XML類型,並存儲到數據庫中。
隨著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, xColXML not null)
XML類型除了在表中使用,還可以在存儲過程、事務、函數等中出現。下面我們來完成我們對XML操作的第一步,使用SQL語句定義一個XML類型的數據,並為它賦值:
declare @xmlDoc xml; set @xmlDoc='<bookid="0001"> <title>C Program</title> <author>David</author> <price>21</price> </book>'
三、查詢操作
在定義了一個XML類型的數據之後,我們最常用的就是查詢操作,下面我們來介紹如何使用SQL語句來進行查詢操作的。
在T-Sql中,提供了兩個對XML類型數據進行查詢的函數,分別是query(xquery)和value(xquery,dataType),其中,query(xquery)得到的是帶有標簽的數據,而
value(xquery,dataType)得到的則是標簽的內容。接下類我們分別使用這兩個函數來進行查詢。
1、使用query(xquery) 查詢
我們需要得到書的標題(title),使用query(xquery)來進行查詢,查詢語句為:
declare @xmlDoc xml; set @xmlDoc='<root> <bookid="0001"> <title>C#Program</title> <author>Jerry</author> <price>50</price> </book> <bookid="0002"> <title>JavaProgram</title> <author>Tom</author> <price>49</price> </book> </root>' select @xmlDoc.query('/root/book/title') select @xmlDoc.query('(//title)[2]') select @xmlDoc.query('(root/book[1]/title)') select @xmlDoc.query('(/root/book/title)[1]') select @xmlDoc.query('/root/book[position()<2]/title') declare @id varchar(max) = '0001' select @xmlDoc.query('/root/book[@id=sql:variable("@id")]/title')