如何使用SQL Server 2000中的XML功能(1)

來源:互聯網
上載者:User

SQL Server 2000提供了一些XML功能,用於通過XML將關係行集合轉換成分層的XML文檔、讀取XML文檔和批量載入資料。例如,可以將XML文檔傳遞到預存程序,將XML聯結到某些表並返回一個行集合,甚至可以在資料庫中修改資料。XML在當今企業系統中不斷擴充的功能促進了OPENXML函數和FOR XML語句的引入。其中某些功能不但支援XML,而且還提高批量載入資料時的效能。

在本文中我們將討論如何通過T-SQL的FOR XML子句從SQL Server返回XML。本文將通過幾個例子來介紹返回XML資料和架構資訊的幾種不同方式,還將介紹將XML轉換成更令人滿意的格式的方法。然後討論OPENXML,以及將XML文檔聯結到資料庫表和使用WriteXml和GetXml方法從資料集提取XML的方法。這些例子的SQL,以及執行其中某些例子並將它們匯出為文字檔的樣本ASP.NET 項目,都可從MSDN Magazine Web網站下載。該樣本項目中還包含了用於從XML將記錄插入和更新到資料庫的代碼。

返回XML

當用於SELECT語句中時,FOR XML子句指示SQL Server將資料作為XML返回,這與標準行集合相反。可以指定返回模式:RAW、AUTO或EXPLICIT。每種模式都提供了XML的不同轉換方式圖 1 給出了各種模式的概述)。

圖 1 FOR XML模式概述

模式 說明
RAW                            行集合的每個記錄都轉換成叫做行的XML元素。元素將包含一個屬性,用來表示所檢索的列。
AUTO 行集合記錄可以轉換成以FROM子句中的表命名的嵌套XML元素。所檢索每一列都將表示為一個屬性
EXPLICIT 為格式化XML提供許多控制。不過,EXPLICIT模式的使用文法要複雜得多。XSLT是一個比較常用的XML轉換方法。

例如,若使用FOR XML RAW來查詢Northwind資料庫的Employees表,它會在元素中返回每個員工行。SELECT語句中包含的每一列都會表示為元素的一個屬性。下面的FOR XML RAW查詢選擇兩個員工記錄,然後以RAW格式返回:   

SELECT EmployeeID,
FirstName, LastName
FROM Employees
WHERE LastName LIKE 'D%'
FOR XML RAW


對該SELECT語句作一下修改就可以使用FOR XML AUTO子句。這次將元素命名為Employees,與源表的名稱匹配。列仍是主要元素的屬性:  

SELECT EmployeeID, FirstName, LastName
FROM Employees
WHERE LastName LIKE 'D%'
FOR XML AUTO


轉換和階層
 
儘管上例中的區別較小,但與用於聯結表的一個查詢一起使用時,AUTO和RAW之間的區別比較明顯。無論資料是來自一個表還是來自多個表,使用FOR XML RAW的查詢都將只返回元素。因此,RAW模式不利用XML文檔的固有分層結構。請看下面的SQL語句:

SELECT   Customers.CustomerID,
CompanyName,
OrderID,
CONVERT(VARCHAR(10), OrderDate, 101) AS OrderDate
FROM     Customers
INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerID

本例將檢索一種一對多父子關係。若執行該SQL語句,則將返回一系列客戶及其相應定單。若附帶FOR XML RAW子句並再次執行,則得出的XML結果將包含一個表示所返回的每一行的單元素。例如,圖 2中的XML資料表示CustomerID為ALFKI時FOR XML RAW將返回的行。

OrderDate="08/25/1997" />

OrderDate="10/03/1997" />

OrderDate="10/13/1997" />

OrderDate="01/15/1998" />

OrderDate="03/16/1998" />

OrderDate="04/09/1998" />

圖 2  XML資料


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.