国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

在SQL Server中用XQuery分解XML數(shù)據(jù)

瀏覽:127日期:2023-11-01 14:32:50

本文討論SQL Server 2005的新功能,它允許你將XML數(shù)據(jù)分解到關(guān)系格式中,而不必耗用太多內(nèi)存。

在舉例說明如何分解上一篇文章中的數(shù)據(jù)時,我們首先了解一下XQuery和它在SQL Server 2005中為開發(fā)者提供的功能。

XQuery介紹

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

SQL Server 2005 XQuery函數(shù)

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

xml.exist

這個方法根據(jù)一個XML節(jié)點上的搜索表達式返回一個布爾值。例如,列表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函數(shù)生成“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數(shù)據(jù)類型的實例。可以按需要將這些查詢簡單或復雜化,下面是一個簡單的例子:

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數(shù)據(jù)類型變量中的數(shù)據(jù)分解到關(guān)系數(shù)據(jù)中時,這個方法十分有用。這個方法接受一個XQuery語句作為參數(shù),并返回一個包含XML變量邏輯標量數(shù)據(jù)的行集。列表B中的查詢利用上面定義的XML變量,并將數(shù)據(jù)分解到一個結(jié)果集中,它顯示在XML變量中定義的人物姓名。

修改OPENXML存儲過程

現(xiàn)在我來說明如何修改上周的OPENXML存儲過程,使其可以應用XQuery功能。首先,我往XML變量中加載一些數(shù)據(jù)。如列表C所示。我們可以建立一個接受XML參數(shù)的過程,再應用XQuery函數(shù)把XML文件中的數(shù)據(jù)插入一個表中,而不必應用OPENXML。如列表D所示。

最初在數(shù)據(jù)庫中應用XML似乎有些難于處理,還要花一些時間習慣使用XQuery和Xpath查詢。但是,經(jīng)過一段時間的學習以后,你就會發(fā)現(xiàn)在數(shù)據(jù)庫中應用XML數(shù)據(jù)相當實用。

例如,在上述存儲過程中應用XML數(shù)據(jù),你只需調(diào)用一次數(shù)據(jù)庫,而不必像典型存儲過程編程那樣調(diào)用N次數(shù)據(jù)庫。這二者似乎區(qū)別不大,但對一個繁忙的系統(tǒng)而言,應用XML數(shù)據(jù)會有很大益處。而且,應用XQuery而非OPENXML還會顯著提高性能,對小型XML文件更是如此。

主站蜘蛛池模板: 怀柔区| 读书| 瑞金市| 叙永县| 崇义县| 昌乐县| 阿图什市| 大连市| 新郑市| 延津县| 忻州市| 尼勒克县| 泰宁县| 泽普县| 合肥市| 繁峙县| 曲阜市| 扎鲁特旗| 崇文区| 卢龙县| 乐昌市| 珲春市| 云和县| 泸水县| 礼泉县| 保靖县| 沙洋县| 临泉县| 怀来县| 丰台区| 临高县| 中山市| 台州市| 平凉市| 云霄县| 大新县| 富民县| 宁晋县| 邢台县| 哈密市| 河曲县|