色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

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

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

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

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

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

XQuery介紹

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

SQL Server 2005 XQuery函數(shù)

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

xml.exist

這個(gè)方法根據(jù)一個(gè)XML節(jié)點(diǎn)上的搜索表達(dá)式返回一個(gè)布爾值。例如,列表A中XML代碼片段中的語(yǔ)句將返回1(真):

SELECT @x.exist('/christmaslist/person[@gift = 'socks']')

這個(gè)語(yǔ)句返回0(假):

SELECT @x. exist ('/christmaslist/zach')

由于“Socks”一詞被封套,這個(gè)語(yǔ)句將返回0(假)。

SELECT @x.exist('/christmaslist/person[@gift = 'socks']')

xml.value

這個(gè)方法接受一個(gè)XQuery語(yǔ)句并返回一個(gè)單獨(dú)值。使用列表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

這個(gè)方法接受一個(gè)XQuery并返回一個(gè)XML數(shù)據(jù)類型的實(shí)例。可以按需要將這些查詢簡(jiǎn)單或復(fù)雜化,下面是一個(gè)簡(jiǎn)單的例子:

SELECT @x.query('/christmaslist/person')

它返回XML文件:

<person name='betty' gift='camera' />

<person name='zach' gift='elmo doll' />

<person name='brad' gift='socks' />

xml.nodes

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

修改OPENXML存儲(chǔ)過(guò)程

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

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

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

主站蜘蛛池模板: 亚洲欧洲精品国产二码 | avtt天堂网永久资源手机版 | 亚洲国产综合精品 | 午夜伦y4480影院中文字幕 | 国产日产高清欧美一区二区三区 | 国产一区亚洲二区三区毛片 | 国产亚洲精品成人a在线 | 精品久久久久不卡无毒 | 欧美一级日韩在线观看 | 性做爰片免费视频毛片中文i | 香蕉福利久久福利久久香蕉 | 国产精品毛片久久久久久久 | 日本三本道 | 国产精品美女一级在线观看 | 亚洲综合成人网在线观看 | 欧美日韩视频二区三区 | 欧美特黄一片aa大片免费看 | 日本一级毛片在线看 | 日韩在线视频网址 | 亚洲精品在线网 | 欧美激情亚洲一区中文字幕 | 看片网站在线 | 国产激情一区二区三区四区 | 欧美日韩性视频一区二区三区 | 日本一级毛片片在线播放 | 国产一起色一起爱 | 亚洲一区二区三区四区 | 国产一级片毛片 | 亚洲精品成人网久久久久久 | 免费又黄又爽的视频 | 日韩 国产 欧美 精品 在线 | 国产一区二区在线播放 | 在线日韩国产 | 亚洲午夜成激人情在线影院 | 国产在线精品一区二区夜色 | 久草草视频在线观看免费高清 | 国产欧美日韩在线 | 性a爱片免费视频性 | 国产一级毛片午夜福 | 亚洲精品亚洲人成在线麻豆 | 黄色三级网站免费 |