


在SQL Server 2005中用XQuery分解XML數據
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文件更是如此。
關鍵字:SQL Server 2005、XQuery、XML、數據庫
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解