Re: [SQL ] 請教xml欄位節點篩選的問題

看板Database作者 (可愛小孩子)時間5年前 (2018/09/18 13:04), 編輯推噓1(100)
留言1則, 1人參與, 5年前最新討論串2/2 (看更多)
我參考以下網站來達成你要的: 1. Examples of using XQuery to update XML Data in SQL Server https://bit.ly/2OzSGJs 2. 節點的本機名稱的相關函式 https://bit.ly/2NiGEro ---------------------- SQL如下: select * into #data from Table1 --「not」 運算子是我 try 出來的,用一般寫程式的邏輯取反向 update t1 set XmlData.modify('delete /root/*[not(local-name() = ("BBB","CCC"))]') from #data select * from #data ※ 引述《YiMMiY (YiMMiY)》之銘言: : MS SQL - 2012 : 各位好 : 現在有一張蠻單純的資料表 : Table1 : { : Pkey nvachar(max) : XmlData xml : } : 假設資料內容 : Pkey XmlData : --------------------------------------- : One <root attr1="One" attr2="XXX"> : <AAA> aaaOne </AAA> : <BBB> bbbOne </BBB> : <CCC> ccc1One </CCC> : <CCC att="2"> ccc2One </CCC> : <DDD> dddOne </DDD> : <root> : Two <root attr1="Two" attr2="XXX"> : <AAA> aaaTwo </AAA> : <BBB> bbbTwo </BBB> : <CCC> ccc1Two </CCC> : <CCC att="2"> ccc2Two </CCC> : <DDD> dddTwo </DDD> : <root> : ...後面還有很多筆 : 現在我想撈BBB CCC,加上查詢條件(EX:Pkey='One' OR Pkey='Two') : SELECT Pkey, XmlData.query('/root/BBB , /root/CCC ') AS XmlData FROM Table1 : WHERE Pkey='One' OR Pkey='Two' : 會得到 : Pkey XmlData : --------------------------------------- : One <BBB> bbbOne </BBB> : <CCC> ccc1One </CCC> : <CCC att="2"> ccc2One </CCC> : Two <BBB> bbbTwo </BBB> : <CCC> ccc1Two </CCC> : <CCC att="2"> ccc2Two </CCC> : 但我希望是能得到 : Pkey XmlData : --------------------------------------- : One <root attr1="One" attr2="XXX"> : <BBB> bbbOne </BBB> : <CCC> ccc1One </CCC> : <CCC att="2"> ccc2One </CCC> : <root> : Two <root attr1="Two" attr2="XXX"> : <BBB> bbbTwo </BBB> : <CCC> ccc1Two </CCC> : <CCC att="2"> ccc2Two </CCC> : <root> : 也就是包完整的XML路徑 : 請問該如何查詢? : 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.168.22.20 ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1537247090.A.7D1.html

09/21 23:42, 5年前 , 1F
感謝您~ 確實能達到目的 但資料量很大時會稍微花一點時間
09/21 23:42, 1F
文章代碼(AID): #1Re8ToVH (Database)
文章代碼(AID): #1Re8ToVH (Database)