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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於SQLServer2005的學習筆記——XML的處理SQLServer筆記XML
- 異常處理流程(不相容SQLServer2005)SQLServer
- 用JDOM處理XML文件 (轉)XML
- SqlServer2005恢復報154錯誤處理SQLServer
- Python資料處理(一):處理 JSON、XML、CSV 三種格式資料PythonJSONXML
- [轉]SQLServer2005連結字串SQLServer字串
- 【原創】sqlserver2005 資料庫表損壞處理一例:SQLServer資料庫
- SqlServer——字串處理函式SQLServer字串函式
- 數字轉時間間隔格式處理
- 關於SQLServer2005的學習筆記——異常捕獲及處理SQLServer筆記
- Go xml檔案處理GoXML
- SAX處理XML例項XML
- xml處理的問題XML
- MyBatis SQL xml處理小於號與大於號正確的格式MyBatisSQLXML
- 使用JDOM處理XML資料之PDF篇(二) (轉)XML
- 使用JDOM處理XML資料之PDF篇(一) (轉)XML
- 【視訊處理】YUV與RGB格式轉換
- perl格式串處理整數溢位漏洞(轉)
- sqlserver日誌檔案總結及充滿處理(轉)SQLServer
- Python將xml格式轉換為json格式PythonXMLJSON
- 使用JAXB處理JAVA和XMLJavaXML
- PHP處理XML的例項PHPXML
- [轉]使用 SAX 處理 XML 文件 和與DOM的區別XML
- 使用JDOM處理XML資料之XSLT篇(二) (轉)XML
- 使用JDOM處理XML資料之XSLT篇(一) (轉)XML
- 在.NET Framework中輕鬆處理XML資料(一) (轉)FrameworkXML
- 在.NET Framework中輕鬆處理XML資料(五) (轉)FrameworkXML
- fMRI預處理之DICOM格式轉NII格式——SPM12批次碼
- SqlServer 2005 常用SQLSQLServer
- 處理SQLServer errorlog滿問題SQLServerError
- Vue格式化處理Vue
- java localdate日期格式處理JavaLDA
- js將xml格式內容轉換為json格式XMLJSON
- XML 程式設計思想:查詢 XML 格式的 WordNet(轉)XML程式設計
- WordPress 生成網站地圖顯示 XML 解析錯誤:格式不佳的處理方法網站地圖XML
- SQLServer解析xml到OracleSQLServerXMLOracle
- 前端如何處理xml配置檔案?前端XML
- SqlServer時間戳與普通格式的轉換SQLServer時間戳