關於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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- XML學習筆記(一):關於字元編碼的理解XML筆記字元
- JSP筆記-XML 資料處理JS筆記XML
- 關於http(自己的學習筆記)HTTP筆記
- Myth 關於Git的學習筆記Git筆記
- React學習筆記-事件處理React筆記事件
- Vue學習筆記之事件處理Vue筆記事件
- iOS 關於tabBar的幾處筆記iOStabBar筆記
- swoft 學習筆記之異常處理筆記
- Flutter學習筆記(32)--PointerEvent事件處理Flutter筆記事件
- vue學習筆記3-事件處理Vue筆記事件
- XML學習筆記–背誦版XML筆記
- 【Go學習筆記16】解析xmlGo筆記XML
- 關於django reset_framework學習之路的筆記DjangoFramework筆記
- Linux系統中對中斷的處理(學習筆記)Linux筆記
- Python深度學習(處理文字資料)--學習筆記(十二)Python深度學習筆記
- OpenCV影像處理學習筆記-Day1OpenCV筆記
- 機器學習筆記---資料預處理機器學習筆記
- SpringMVC學習筆記10-異常處理SpringMVC筆記
- 【筆記】基於Python的數字影象處理筆記Python
- 關於網路安全的逆向分析方向學習筆記筆記
- Python3學習筆記(5)常用模組:time、datetime、random、os、sys、shutil、shelve、xml處理Python筆記randomXML
- YOLOv3學習筆記之資料處理YOLO筆記
- 一份關於 Java、Kotlin 與 Android 的學習筆記JavaKotlinAndroid筆記
- php 學習筆記之關於時區的那點事PHP筆記
- C#關於List<T>的自定義排序學習筆記C#排序筆記
- ABAP學習筆記-基礎語法-05-字串的處理(02)筆記字串
- numpy的學習筆記\pandas學習筆記筆記
- Dotnetty學習筆記——自定義初始化處理器Netty筆記
- 【Pandas學習筆記02】-資料處理高階用法筆記
- 【Pandas學習筆記02】處理資料實用操作筆記
- 【學習筆記】關於Freemark程式碼輸出值的問題筆記
- 數字影像處理學習筆記(1)——傅立葉變換在影像處理中的應用筆記
- Javascript中的關鍵字'this'學習筆記JavaScript筆記
- 關於Python中的日期處理Python
- python自然語言處理學習筆記(八)—— 句法分析Python自然語言處理筆記
- SpringMVC學習筆記6-指定處理請求型別SpringMVC筆記型別
- Vue學習筆記 - 關於過渡效果的一些總結Vue筆記
- 學習 XSLT:XML文件轉換的關鍵XML
- 資訊理論理論學習筆記筆記