關於SQLServer2005的學習筆記——XML的處理
在SQLServer2005中對XML的處理功能顯然增強了很多,提供了query(),value(),exist(),modify(),nodes()等函式。
關於xml,難以理解的不是SQLServer提供的函式,而是對xml本身的理解,看似很簡單的檔案格式,處理起來卻是非常困難的。本文只是初探一下而已。
詳見SQLServer聯機幫助:
主題 |
說明 |
|
此方法用於對 XML 例項進行查詢。 |
|
此方法用於從 XML 例項檢索 SQL 型別的值。 |
|
此方法用於確定查詢是否返回非空結果。 |
|
此方法用於指定 語句以執行更新。 |
|
此方法用於將 XML 拆分成多行以將 XML 文件的組成部分傳播到行集中。 |
閒話少說,首先建立一個包含xml型別的資料表,其次建立一個xml檔案,在服務端把xml檔案內容載入該資料表中。
CREATE TABLE VisioXML ( ID INT, Doc XML ); GO 建立一個名為xxx.xml的檔案,內容如下 /*
*/ INSERT INTO VisioXML(ID,Doc) SELECT 4,* FROM OPENROWSET(BULK 'e:\xxx.xml',SINGLE_BLOB) AS x; |
--以下為value()和query()的用法
--SELECT * FROM VisioXML WHERE ID=4 SELECT Doc.value('(/ROOT/ROW[1]/ID/text())[1]','int') RootRowID1, --第一行ID的值,並且轉換為int型別 Doc.value('(/ROOT/ROW[2]/ID/text())[1]','int') RootRowID2, --第二行ID的值,並且轉換為int型別 Doc.value('(/ROOT/ROW[1]/NAME/text())[1]','varchar(20)') RootRowNAME1, --第一行NAME的值,並且轉換為VARCHAR型別 Doc.value('(/ROOT/ROW[1]/NAME/@SEX)[1]','varchar(20)') RootRowNAME1SEX, --第一行NAME中SEX屬性的值,並且轉換為VARCHAR型別 Doc.query('/ROOT') Root, --ROOT下的所有XML內容,型別為XML Doc.query('/ROOT/ROW[1]') RootRow1, --ROOT下第一行所有的XML內容,型別為XML Doc.query('/ROOT/ROW[2]') RootRow2 --ROOT下第二行所有的XML內容,型別為XML FROM VisioXML WHERE ID=4 |
--以下為exist()函式在兩種環境下的用法
SELECT Doc.exist('/ROOT/ROW[1]/NAME[(@SEX cast as xs:string?) = xs:string("MALE")]') Row1EQStringMale, Doc.exist('/ROOT/ROW[1]/NAME[(@SEX cast as xs:string?) = "MALE"]') Row1EQMale, Doc.exist('/ROOT/ROW[1]/ID[(text()[1] cast as xs:float?) = xs:float(1)]') Row1EQfloat1, Doc.exist('/ROOT/ROW[2]/ID[(text()[1] cast as xs:float?) = 2]') Row1EQ1 FROM VisioXML WHERE ID=4
SELECT ID,Doc FROM VisioXML WHERE ID=4 AND Doc.exist('/ROOT/ROW[1]/NAME[(@SEX)]')=1 --第一行NAME中存在SEX屬性 --AND Doc.exist('/ROOT/ROW[1]/NAME[not(@SEX)]')=1 --第一行NAME中不存在SEX屬性 --AND Doc.exist('/ROOT/ROW[1][not(ID/*)]')=1 --第一行不存在ID欄位 --AND Doc.exist('/ROOT/ROW[1][(ID/*)]')=1 --第一行存在ID欄位 |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-628451/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於SQLServer2005的學習筆記——異常捕獲及處理SQLServer筆記
- 關於SQLServer2005的學習筆記(一)——前言SQLServer筆記
- 關於SQLServer2005的學習筆記——生日問題SQLServer筆記
- 關於SQLServer2005的學習筆記——子查詢SQLServer筆記
- 關於SQLServer2005的學習筆記——分析函式SQLServer筆記函式
- 關於SQLServer2005的學習筆記——樹形結構SQLServer筆記
- XML學習筆記(一):關於字元編碼的理解XML筆記字元
- 關於SQLServer2005的學習筆記——自定義分組的實現SQLServer筆記
- 關於SQLServer2005的學習筆記——SQL查詢解析步驟SQLServer筆記
- banq:關於XML的學習XML
- 關於SQLServer2005的學習筆記——臨時表、表變數和CTESQLServer筆記變數
- 關於SQLServer2005的學習筆記——多觸發器執行問題SQLServer筆記觸發器
- 關於http(自己的學習筆記)HTTP筆記
- 關於SQLServer2005的學習筆記——約束、Check、觸發器的執行順序SQLServer筆記觸發器
- React學習筆記-事件處理React筆記事件
- 關於SQLServer2005的學習筆記——CTE遞迴和模擬測試資料SQLServer筆記遞迴
- Myth 關於Git的學習筆記Git筆記
- Vue學習筆記之事件處理Vue筆記事件
- JSP筆記-XML 資料處理JS筆記XML
- swift 關於 toolbar 學習筆記Swift筆記
- Flutter學習筆記(32)--PointerEvent事件處理Flutter筆記事件
- swoft 學習筆記之異常處理筆記
- vue學習筆記3-事件處理Vue筆記事件
- 關於django reset_framework學習之路的筆記DjangoFramework筆記
- iOS 關於tabBar的幾處筆記iOStabBar筆記
- Erlang學習筆記(六)順序程式的錯誤處理筆記
- XML學習筆記–背誦版XML筆記
- 【Go學習筆記16】解析xmlGo筆記XML
- OpenCV影像處理學習筆記-Day1OpenCV筆記
- OS學習筆記三:處理器排程筆記
- angular學習筆記(十)-src和href處理Angular筆記
- 關於網路安全的逆向分析方向學習筆記筆記
- Python深度學習(處理文字資料)--學習筆記(十二)Python深度學習筆記
- Linux系統中對中斷的處理(學習筆記)Linux筆記
- YOLOv3學習筆記之資料處理YOLO筆記
- SpringMVC學習筆記10-異常處理SpringMVC筆記
- SpringMVC 學習筆記(四) 處理模型資料SpringMVC筆記模型
- Java中文處理學習筆記——Hello Unicode (轉)Java筆記Unicode