SqlServer 2005處理xml格式 (轉)
01 | declare @x xml,@y xml |
02 | set @x=' |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
10 |
11 |
12 | ' |
13 | set @y=' |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | '有連個變數如上所示: |
22 | 現在要求得到下面的格式: |
23 | /* |
24 |
25 | |
26 | |
27 | |
28 |
29 |
30 | |
31 | |
32 | |
33 |
34 | */ |
下面是xml操作的答案:
01 | select |
02 | D.x.value('./id[1]','int') AS id, |
03 | D.x.value('./title[1]','nvarchar(100)') AS title, |
04 | D.x.value('./value[1]','nvarchar(100)') AS [value] |
05 | from @x.nodes('/*') as D(x) |
06 |
07 | ;with t1 |
08 | as( |
09 | select |
10 | D.x.value('./id[1]','int') AS id, |
11 | D.x.value('./title[1]','nvarchar(100)') AS title, |
12 | D.x.value('./value[1]','nvarchar(100)') AS [value] |
13 | from @x.nodes('/*') as D(x)), |
14 | t2 |
15 | as( |
16 | select |
17 | D.x.value('./id[1]','int') AS id, |
18 | D.x.value('./value[1]','nvarchar(100)') AS [value] |
19 | from @y.nodes('/*') as D(x)) |
20 | select a.id,title,b.[value] |
21 | from t1 as a |
22 | left join t2 as b on a.id = b.id |
23 | for xml path('item') |
隨著標準化的執行,我相信以後sql裡會有更多對xml的操作。
下面解讀一下上面的sql:
WITH AS短語,也叫做子查詢部分(subquery factoring),可以讓你做很多事情,定義一個SQL片斷,該SQL片斷會被整個SQL語句所用到。有的時候,是為了讓SQL語句的可讀性更高些,也有可能是在UNION ALL的不同部分,作為提供資料的部分。
特別對於UNION ALL比較有用。因為UNION ALL的每個部分可能相同,但是如果每個部分都去執行一遍的話,則成本太高,所以可以使用WITH AS短語,則只要執行一遍即可。如果WITH AS短語所定義的表名被呼叫兩次以上,則優化器會自動將WITH AS短語所獲取的資料放入一個TEMP表裡,如果只是被呼叫一次,則不會。而提示materialize則是強制將WITH AS短語裡的資料放入一個全域性臨時表裡。很多查詢通過這種方法都可以提高速度。
然後就是兩個對xml操作的函式:
如果希望將 XML 資料型別例項拆分為關係資料,nodes() 方法十分有用。它允許您標識將對映到新行的節點。
每一個 xml 資料型別例項都具有隱式提供的上下文節點。對於在列或變數中儲存的 XML 例項來說,它是文件節點。文件節點是位於每個 xml 資料型別例項頂部的隱式節點。 nodes() 方法的結果是一個包含原始 XML 例項的邏輯副本的行集。在這些邏輯副本中,每個行示例的上下文節點都被設定成由查詢表示式標識的節點之一。這樣,後續的查詢可以瀏覽與這些上下文節點相關的節點。 您可以從行集中檢索多個值。例如,可以將 value() 方法應用於 nodes() 所返回的行集,從原始 XML 例項中檢索多個值。請注意,當 value() 方法應用於 XML 例項時,它僅返回一個值。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-671650/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SqlServer 2005 TriggerSQLServer
- Python資料處理(一):處理 JSON、XML、CSV 三種格式資料PythonJSONXML
- Python將xml格式轉換為json格式PythonXMLJSON
- sqlserver2005預編譯SQLServer編譯
- Go xml檔案處理GoXML
- MyBatis SQL xml處理小於號與大於號正確的格式MyBatisSQLXML
- 處理SQLServer errorlog滿問題SQLServerError
- fMRI預處理之DICOM格式轉NII格式——SPM12批次碼
- WordPress 生成網站地圖顯示 XML 解析錯誤:格式不佳的處理方法網站地圖XML
- 前端如何處理xml配置檔案?前端XML
- JSP筆記-XML 資料處理JS筆記XML
- java localdate日期格式處理JavaLDA
- Vue格式化處理Vue
- MyBatis SQL資料庫xml處理小於號與大於號正確的格式MyBatisSQL資料庫XML
- json字串轉義格式化後再轉換處理demo StringEscapeUtils.unescapeJavaJSON字串Java
- linux 透過xmllint處理xml檔案LinuxXML
- 處理XML資料應用實踐XML
- jackson時間格式的處理
- 處理json格式的資料JSON
- SQLServer資料庫日誌太大處理方式SQLServer資料庫
- 處理檔案上傳時的訊息格式轉換問題
- 生信分析預處理:plink兩種格式識別與轉換
- 影片格式處理:騰訊影片格式怎麼轉換成mp4檔案?
- sql server日期格式 sqlserver的日期格式SQLServer
- 29.Spring Boot中異常處理與REST格式處理Spring BootREST
- sqlserver資料庫日期如何格式化-日期轉換字串SQLServer資料庫字串
- ChannelHandler之間處理資料格式轉換與Netty自帶的ChannelhandlerNetty
- 獲取SqlServer 2005中欄位的備註資訊SQLServer
- SQLServer mirror當機後error 9004異常處理SQLServerError
- 如何在SQLServer中處理每天四億三千萬記錄的SQLServer
- ABAP和XML資料格式互相轉換的兩種方式XML
- hrsc2016資料集xml格式轉換為yolo格式,附下載連結XMLYOLO
- 資料匯入與預處理實驗二---json格式檔案轉換JSON
- 淺談zip格式處理邏輯漏洞
- PHP xml 轉陣列 陣列轉 xml 操作PHPXML陣列
- java 如何簡單快速處理 xml 中的資料JavaXML
- 如果ChannelHandler之間處理資料格式不一樣,可以怎麼做轉換?
- Python excel表格讀寫,格式化處理PythonExcel
- SQLServer的tempdb暴增導致磁碟消耗的處理方案SQLServer