在SQL Server 2005中用XQuery分解XML資料

來源:互聯網
上載者:User

  本文討論SQL Server 2005的新功能,它允許你將XML資料分解到關係格式中,而不必耗用太多記憶體。我們首先瞭解一下XQuery和它在SQL Server 2005中為開發人員提供的功能。

  XQuery介紹

  XQuery,也稱作XML Query,是一種查詢XML資料的語言,允許你提取所需的節點和元素。它由W3C定義,可用於今天的大多數主流資料庫引擎中,如Oracle、DB2和SQL Server。

  SQL Server 2005 XQuery函數

  下面的四個函數是SQL Server 2005中的XQuery函數。(注意,XML、XQuery語句和下面的函數都區分大小寫。例如,SQL編譯器接受XML資料中的.exist,但拒絕.EXIST或.Exist。)xml.exist

  這個方法根據一個XML節點上的搜尋運算式返回一個布爾值。例如,列表A中XML程式碼片段中的語句將返回1(真):SELECT @x.exist('/christmaslist/person[@gift = "socks"]')

  這個語句返回0(假):SELECT @x. exist ('/christmaslist/zach')

  由於“Socks”一詞被封套,這個語句將返回0(假)。SELECT @x.exist('/christmaslist/person[@gift = "socks"]')
xml.value

  這個方法接受一個XQuery語句並返回一個單獨值。使用列表A中同樣的XML程式碼片段,不可以使用VALUE函數產生“betty”值,如下所示:SELECT @x.value('/christmaslist[1]/person[1]/@name', 'VARCHAR(20)')

  而XQuery產生“zach”值。SELECT @x.value('/christmaslist[1]/person[2]/@name', 'VARCHAR(20)')
xml.query

  這個方法接受一個XQuery並返回一個XML資料類型的執行個體。可以按需要將這些查詢簡單或複雜化,下面是一個簡單的例子:SELECT @x.query('/christmaslist/person')

  它返回XML檔案:<person name="betty" gift="camera" />
<person name="zach" gift="elmo doll" />
<person name="brad" gift="socks" />
xml.nodes

  在你需要將一個XML資料類型變數中的資料分解到關係資料中時,這個方法十分有用。這個方法接受一個XQuery語句作為參數,並返回一個包含XML變數邏輯標量資料的行集。列表B中的查詢利用上面定義的XML變數,並將資料分解到一個結果集中,它顯示在XML變數中定義的人物姓名。

  修改OPENXML預存程序

  現在我來說明如何修改上周的OPENXML預存程序,使其可以應用XQuery功能。首先,我往XML變數中載入一些資料。如列表C所示。我們可以建立一個接受XML參數的過程,再應用XQuery函數把XML檔案中的資料插入一個表中,而不必應用OPENXML。如列表D所示。

  最初在資料庫中應用XML似乎有些難於處理,還要花一些時間習慣使用XQuery和Xpath查詢。但是,經過一段時間的學習以後,你就會發現在資料庫中應用XML資料相當實用。

  例如,在上述預存程序中應用XML資料,你只需調用一次資料庫,而不必像典型預存程序編程那樣調用N次資料庫。這二者似乎區別不大,但對一個繁忙的系統而言,應用XML資料會有很大益處。而且,應用XQuery而非OPENXML還會顯著提高效能,對小型XML檔案更是如此。



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。